diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
-
-
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
index 433ea5c..b93c694 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
@@ -44,6 +44,8 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
+import java.util.Timer
+import java.util.TimerTask
import java.util.concurrent.TimeUnit
class SuppliesActivity : KotlinBaseActivity(), Handler.Callback {
@@ -53,7 +55,9 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
private lateinit var imageAdapter: EditableImageAdapter
+ private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
private val recyclerViewImages: ArrayList = ArrayList() //真实图片路径
@@ -96,7 +100,7 @@
) {
Log.d(kTag, "startVideoLauncher: ")
SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
+ constructionCheckViewModel.setCurrentPhase("before_operation_protection")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -114,6 +118,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@SuppliesActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -131,6 +136,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -147,13 +153,20 @@
constructionCheckViewModel =
ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- initWebSocket()
-
binding.videoView.setOnPreparedListener {
binding.videoView.requestFocus()
binding.videoView.start()
}
+ timer = Timer()
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
+ }
+ }, 0, 5000)
+
//左右边距
val viewWidth = getScreenWidth() - (15 + 15).dp2px(this)
imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 6, 3)
@@ -228,6 +241,7 @@
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
+ timer.cancel()
webSocket?.close(1000, null)
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
index 433ea5c..b93c694 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
@@ -44,6 +44,8 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
+import java.util.Timer
+import java.util.TimerTask
import java.util.concurrent.TimeUnit
class SuppliesActivity : KotlinBaseActivity(), Handler.Callback {
@@ -53,7 +55,9 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
private lateinit var imageAdapter: EditableImageAdapter
+ private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
private val recyclerViewImages: ArrayList = ArrayList() //真实图片路径
@@ -96,7 +100,7 @@
) {
Log.d(kTag, "startVideoLauncher: ")
SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
+ constructionCheckViewModel.setCurrentPhase("before_operation_protection")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -114,6 +118,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@SuppliesActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -131,6 +136,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -147,13 +153,20 @@
constructionCheckViewModel =
ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- initWebSocket()
-
binding.videoView.setOnPreparedListener {
binding.videoView.requestFocus()
binding.videoView.start()
}
+ timer = Timer()
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
+ }
+ }, 0, 5000)
+
//左右边距
val viewWidth = getScreenWidth() - (15 + 15).dp2px(this)
imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 6, 3)
@@ -228,6 +241,7 @@
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
+ timer.cancel()
webSocket?.close(1000, null)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
index 7014945..a29dde0 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -19,7 +19,6 @@
private val gson = Gson()
val alarmModel = MutableLiveData()
val detailModel = MutableLiveData()
- val alarmState = MutableLiveData()
fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({
loadState.value = LoadState.Loading
@@ -66,19 +65,4 @@
fun changeAlarmState(deviceIp: String, state: String) = launch({
RetrofitServiceManager.changeAlarmState(state)
})
-
- fun getAlarmState(context: Context) = launch({
- val response = RetrofitServiceManager.getAlarmState()
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
index 433ea5c..b93c694 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
@@ -44,6 +44,8 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
+import java.util.Timer
+import java.util.TimerTask
import java.util.concurrent.TimeUnit
class SuppliesActivity : KotlinBaseActivity(), Handler.Callback {
@@ -53,7 +55,9 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
private lateinit var imageAdapter: EditableImageAdapter
+ private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
private val recyclerViewImages: ArrayList = ArrayList() //真实图片路径
@@ -96,7 +100,7 @@
) {
Log.d(kTag, "startVideoLauncher: ")
SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
+ constructionCheckViewModel.setCurrentPhase("before_operation_protection")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -114,6 +118,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@SuppliesActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -131,6 +136,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -147,13 +153,20 @@
constructionCheckViewModel =
ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- initWebSocket()
-
binding.videoView.setOnPreparedListener {
binding.videoView.requestFocus()
binding.videoView.start()
}
+ timer = Timer()
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
+ }
+ }, 0, 5000)
+
//左右边距
val viewWidth = getScreenWidth() - (15 + 15).dp2px(this)
imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 6, 3)
@@ -228,6 +241,7 @@
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
+ timer.cancel()
webSocket?.close(1000, null)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
index 7014945..a29dde0 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -19,7 +19,6 @@
private val gson = Gson()
val alarmModel = MutableLiveData()
val detailModel = MutableLiveData()
- val alarmState = MutableLiveData()
fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({
loadState.value = LoadState.Loading
@@ -66,19 +65,4 @@
fun changeAlarmState(deviceIp: String, state: String) = launch({
RetrofitServiceManager.changeAlarmState(state)
})
-
- fun getAlarmState(context: Context) = launch({
- val response = RetrofitServiceManager.getAlarmState()
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
index 8317578..c448bfa 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
@@ -1,47 +1,26 @@
package com.casic.br.operationsite.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.operationsite.extensions.getResponseCode
-import com.casic.br.operationsite.extensions.getResponseMessage
-import com.casic.br.operationsite.model.CommonResultModel
import com.casic.br.operationsite.retrofit.RetrofitServiceManager
-import com.google.gson.Gson
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
class ConstructionCheckViewModel : BaseViewModel() {
- private val gson by lazy { Gson() }
- val postResult = MutableLiveData()
+ val setCurrentPhaseResult = MutableLiveData()
+ val setVideoRegionResult = MutableLiveData()
- fun setCurrentPhase(context: Context, phase: String) = launch({
- val response = RetrofitServiceManager.setCurrentPhase(phase)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setVideoRegion(position: ArrayList) = launch({
+ val response = RetrofitServiceManager.setVideoRegion(position)
+ setVideoRegionResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
- fun setVideoRegion(context: Context, position: ArrayList) = launch({
- val response = RetrofitServiceManager.setVideoRegion(position)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setCurrentPhase(phase: String) = launch({
+ val response = RetrofitServiceManager.setCurrentPhase(phase)
+ setCurrentPhaseResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
index 433ea5c..b93c694 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
@@ -44,6 +44,8 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
+import java.util.Timer
+import java.util.TimerTask
import java.util.concurrent.TimeUnit
class SuppliesActivity : KotlinBaseActivity(), Handler.Callback {
@@ -53,7 +55,9 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
private lateinit var imageAdapter: EditableImageAdapter
+ private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
private val recyclerViewImages: ArrayList = ArrayList() //真实图片路径
@@ -96,7 +100,7 @@
) {
Log.d(kTag, "startVideoLauncher: ")
SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
+ constructionCheckViewModel.setCurrentPhase("before_operation_protection")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -114,6 +118,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@SuppliesActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -131,6 +136,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -147,13 +153,20 @@
constructionCheckViewModel =
ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- initWebSocket()
-
binding.videoView.setOnPreparedListener {
binding.videoView.requestFocus()
binding.videoView.start()
}
+ timer = Timer()
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
+ }
+ }, 0, 5000)
+
//左右边距
val viewWidth = getScreenWidth() - (15 + 15).dp2px(this)
imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 6, 3)
@@ -228,6 +241,7 @@
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
+ timer.cancel()
webSocket?.close(1000, null)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
index 7014945..a29dde0 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -19,7 +19,6 @@
private val gson = Gson()
val alarmModel = MutableLiveData()
val detailModel = MutableLiveData()
- val alarmState = MutableLiveData()
fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({
loadState.value = LoadState.Loading
@@ -66,19 +65,4 @@
fun changeAlarmState(deviceIp: String, state: String) = launch({
RetrofitServiceManager.changeAlarmState(state)
})
-
- fun getAlarmState(context: Context) = launch({
- val response = RetrofitServiceManager.getAlarmState()
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
index 8317578..c448bfa 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
@@ -1,47 +1,26 @@
package com.casic.br.operationsite.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.operationsite.extensions.getResponseCode
-import com.casic.br.operationsite.extensions.getResponseMessage
-import com.casic.br.operationsite.model.CommonResultModel
import com.casic.br.operationsite.retrofit.RetrofitServiceManager
-import com.google.gson.Gson
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
class ConstructionCheckViewModel : BaseViewModel() {
- private val gson by lazy { Gson() }
- val postResult = MutableLiveData()
+ val setCurrentPhaseResult = MutableLiveData()
+ val setVideoRegionResult = MutableLiveData()
- fun setCurrentPhase(context: Context, phase: String) = launch({
- val response = RetrofitServiceManager.setCurrentPhase(phase)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setVideoRegion(position: ArrayList) = launch({
+ val response = RetrofitServiceManager.setVideoRegion(position)
+ setVideoRegionResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
- fun setVideoRegion(context: Context, position: ArrayList) = launch({
- val response = RetrofitServiceManager.setVideoRegion(position)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setCurrentPhase(phase: String) = launch({
+ val response = RetrofitServiceManager.setCurrentPhase(phase)
+ setCurrentPhaseResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
diff --git a/app/src/main/res/layout/activity_construction_check.xml b/app/src/main/res/layout/activity_construction_check.xml
deleted file mode 100644
index 2e163a6..0000000
--- a/app/src/main/res/layout/activity_construction_check.xml
+++ /dev/null
@@ -1,418 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6a65259..ed8b745 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -77,10 +77,8 @@
android:name=".view.BigImageActivity"
android:theme="@style/Theme.BigImageActivity" />
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
index 433ea5c..b93c694 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
@@ -44,6 +44,8 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
+import java.util.Timer
+import java.util.TimerTask
import java.util.concurrent.TimeUnit
class SuppliesActivity : KotlinBaseActivity(), Handler.Callback {
@@ -53,7 +55,9 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
private lateinit var imageAdapter: EditableImageAdapter
+ private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
private val recyclerViewImages: ArrayList = ArrayList() //真实图片路径
@@ -96,7 +100,7 @@
) {
Log.d(kTag, "startVideoLauncher: ")
SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
+ constructionCheckViewModel.setCurrentPhase("before_operation_protection")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -114,6 +118,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@SuppliesActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -131,6 +136,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -147,13 +153,20 @@
constructionCheckViewModel =
ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- initWebSocket()
-
binding.videoView.setOnPreparedListener {
binding.videoView.requestFocus()
binding.videoView.start()
}
+ timer = Timer()
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
+ }
+ }, 0, 5000)
+
//左右边距
val viewWidth = getScreenWidth() - (15 + 15).dp2px(this)
imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 6, 3)
@@ -228,6 +241,7 @@
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
+ timer.cancel()
webSocket?.close(1000, null)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
index 7014945..a29dde0 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -19,7 +19,6 @@
private val gson = Gson()
val alarmModel = MutableLiveData()
val detailModel = MutableLiveData()
- val alarmState = MutableLiveData()
fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({
loadState.value = LoadState.Loading
@@ -66,19 +65,4 @@
fun changeAlarmState(deviceIp: String, state: String) = launch({
RetrofitServiceManager.changeAlarmState(state)
})
-
- fun getAlarmState(context: Context) = launch({
- val response = RetrofitServiceManager.getAlarmState()
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
index 8317578..c448bfa 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
@@ -1,47 +1,26 @@
package com.casic.br.operationsite.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.operationsite.extensions.getResponseCode
-import com.casic.br.operationsite.extensions.getResponseMessage
-import com.casic.br.operationsite.model.CommonResultModel
import com.casic.br.operationsite.retrofit.RetrofitServiceManager
-import com.google.gson.Gson
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
class ConstructionCheckViewModel : BaseViewModel() {
- private val gson by lazy { Gson() }
- val postResult = MutableLiveData()
+ val setCurrentPhaseResult = MutableLiveData()
+ val setVideoRegionResult = MutableLiveData()
- fun setCurrentPhase(context: Context, phase: String) = launch({
- val response = RetrofitServiceManager.setCurrentPhase(phase)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setVideoRegion(position: ArrayList) = launch({
+ val response = RetrofitServiceManager.setVideoRegion(position)
+ setVideoRegionResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
- fun setVideoRegion(context: Context, position: ArrayList) = launch({
- val response = RetrofitServiceManager.setVideoRegion(position)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setCurrentPhase(phase: String) = launch({
+ val response = RetrofitServiceManager.setCurrentPhase(phase)
+ setCurrentPhaseResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
diff --git a/app/src/main/res/layout/activity_construction_check.xml b/app/src/main/res/layout/activity_construction_check.xml
deleted file mode 100644
index 2e163a6..0000000
--- a/app/src/main/res/layout/activity_construction_check.xml
+++ /dev/null
@@ -1,418 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_guardians.xml b/app/src/main/res/layout/activity_guardians.xml
index 4474864..3aa3799 100644
--- a/app/src/main/res/layout/activity_guardians.xml
+++ b/app/src/main/res/layout/activity_guardians.xml
@@ -16,7 +16,7 @@
app:tbv_only_show_title="false"
app:tbv_show_left_image="true"
app:tbv_show_right_image="false"
- app:tbv_text="作业中监护人员检测"
+ app:tbv_text="监护人员检测"
app:tbv_text_color="@color/white"
app:tbv_text_size="@dimen/sp_18" />
@@ -65,13 +65,31 @@
android:text="声光报警" />
-
+ android:orientation="horizontal">
+
+
+
+
+
-
-
): String {
val param = JsonObject()
- val typeToken = object : TypeToken>() {}.type
- param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+ param.addProperty("position", position.toJson())
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index c5878b1..be24acf 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -47,8 +47,12 @@
// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
const val SERVER_BASE_URL = "http://111.198.10.15:22006"
- const val GAS_BASE_IP = "192.168.10.144"
- const val AI_BASE_IP = "192.168.10.136"
+
+ //一体机DeviceMonitor程序TCP Server IP地址
+ const val GAS_BASE_IP = "192.168.10.142"
+
+ //一体机算法程序IP地址
+ const val AI_BASE_IP = "192.168.10.141"
const val AI_BASE_URL = "http://${AI_BASE_IP}:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
deleted file mode 100644
index f30928d..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
+++ /dev/null
@@ -1,325 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.Handler
-import android.os.Message
-import android.util.Log
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.lifecycle.ViewModelProvider
-import com.bumptech.glide.Glide
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.callback.OnImageCompressListener
-import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
-import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.compressImage
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.utils.LocaleConstant
-import com.casic.br.operationsite.utils.tcp.SocketManager
-import com.casic.br.operationsite.vm.AlarmViewModel
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.casic.br.operationsite.vm.UploadFileViewModel
-import com.casic.br.operationsite.vm.WorkSiteViewModel
-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.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.pengxh.kt.lite.widget.TitleBarView
-import java.io.File
-import java.util.Timer
-import java.util.TimerTask
-
-class ConstructionCheckActivity : KotlinBaseActivity(),
- Handler.Callback {
-
- private val kTag = "ConstructionCheckActivity"
- private val context = this
- private lateinit var uploadFileViewModel: UploadFileViewModel
- private lateinit var alarmViewModel: AlarmViewModel
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var workSiteViewModel: WorkSiteViewModel
- private lateinit var timer: Timer
- private lateinit var weakReferenceHandler: WeakReferenceHandler
- private var isConnected = false
- private var isCompletedFirst = false
- private var isCompletedSecond = false
- private var isCompletedThird = false
-
- /**
- * 1 - 确认现场
- * 2 - 环境监测-确认鼓风机
- * 3 - 劳保用品-确认鼓风机
- * */
- private var type = 1
-
- override fun initEvent() {
- binding.connectTcpButton.setOnClickListener {
- if (isConnected) {
- SocketManager.get.close()
- } else {
- SocketManager.get.connectTcpServer("192.168.10.145", LocaleConstant.TCP_PORT)
- }
- }
-
- binding.startCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
- }
-
- binding.captureDisclosureImageButton.setOnClickListener {
- type = 1
- captureImage()
- }
-
- binding.endCheckButton.setOnClickListener {
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- //发送指令
- SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
- isCompletedFirst = true
- }
-
- binding.startEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
- }
-
- binding.captureEnvImageButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
- type = 2
- captureImage()
- }
-
- binding.endEnvCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- }
-
- binding.endGasCheckButton.setOnClickListener {
- if (!isCompletedFirst) {
- "请先完成交底".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.END_ENV_COMMAND)
- isCompletedSecond = true
- }
-
- binding.startSuppliesCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
-
- if (!isConnected) {
- "指令发送失败,请确认是否处于同一网段".show(this)
- return@setOnClickListener
- }
- SocketManager.get.send(LocaleConstant.START_SUPPLIES_COMMAND)
- }
-
- binding.startVideoCheckButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- startVideoLauncher.launch(Intent(this, HelmetVideoActivity::class.java))
- }
-
- binding.captureBlowerImageButton.setOnClickListener {
- if (!isCompletedSecond) {
- "请先完成环境检测".show(this)
- return@setOnClickListener
- }
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
- type = 3
- captureImage()
- isCompletedThird = true
- }
-
- binding.setVideoRegionButton.setOnClickListener {
- if (!isCompletedThird) {
- "请先完成劳保用品检测".show(this)
- return@setOnClickListener
- }
- val intent = Intent(this, VideoBoundaryActivity::class.java)
- intent.putExtra(Constant.INTENT_PARAM, "192.168.10.137")
- videoRegionLauncher.launch(intent)
- }
-
- binding.endAllCheckButton.setOnClickListener {
- finish()
- }
- }
-
- private val startVideoLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "startVideoLauncher: ")
- SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- }
-
- private val videoRegionLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult()
- ) {
- Log.d(kTag, "videoRegionLauncher: ")
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
- }
-
- private fun captureImage() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- result?.apply {
- first().realPath.compressImage(context, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- uploadFileViewModel.uploadImage(context, file)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- override fun handleMessage(msg: Message): Boolean {
- isConnected = msg.what == 2024061801
- when (msg.what) {
- 2024061801 -> {
- binding.tcpStateView.setBackgroundColor(Color.GREEN)
- binding.connectTcpButton.text = "断开"
- }
-
- 2024061802 -> {
- binding.tcpStateView.setBackgroundColor(Color.RED)
- binding.connectTcpButton.text = "连接"
- }
- }
- return true
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- val projectId = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- weakReferenceHandler = WeakReferenceHandler(this)
-
- uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
- uploadFileViewModel.resultModel.observe(this) {
- if (it.code == 200) {
- val path = it.data.toString()
- if (path.isNotBlank()) {
- val url = path.combineImagePath()
- Log.d(kTag, "url: $url")
- when (type) {
- 1 -> Glide.with(this).load(url).into(binding.disclosureImageView)
- 2 -> Glide.with(this).load(url).into(binding.envImageView)
- 3 -> Glide.with(this).load(url).into(binding.suppliesImageView)
- }
- "请点击完成确认".show(this)
- }
- }
- }
-
- alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
-
- timer = Timer()
- workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
- timer.schedule(object : TimerTask() {
- override fun run() {
- workSiteViewModel.getWorkers(context, projectId)
- }
- }, 0, 5000)
- workSiteViewModel.workerResult.observe(this) {
- if (it.code == 200) {
- it.data.forEach { worker ->
- if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) {
- binding.coValueView.text = "CO:${worker.co}ppm"
- binding.gasValueView.text = "CH4:${worker.gas}ppm"
- binding.h2sValueView.text = "H2S:${worker.co}ppm"
- binding.o2ValueView.text = "O2:${worker.o2}%VOL"
- }
- }
- }
- }
- }
-
- override fun initViewBinding(): ActivityConstructionCheckBinding {
- return ActivityConstructionCheckBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
- uploadFileViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "图片上传中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- timer.cancel()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
deleted file mode 100644
index 120ae07..0000000
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.casic.br.operationsite.view
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.util.Log
-import androidx.lifecycle.ViewModelProvider
-import com.casic.br.operationsite.R
-import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
-import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.vm.ConstructionCheckViewModel
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.getScreenWidth
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.ActivityStackManager
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.widget.TitleBarView
-
-class VideoBoundaryActivity : KotlinBaseActivity() {
-
- private val kTag = "VideoBoundaryActivity"
- private val context = this@VideoBoundaryActivity
- private var isStarted = false
- private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
- private lateinit var cameraAddresses: String
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- ActivityStackManager.addActivity(this)
-
- cameraAddresses = intent.getStringExtra(Constant.INTENT_PARAM) as String
-
- val params = binding.fragmentContainer.layoutParams
- params.width = getScreenWidth()
- params.height = ((9 / 16f) * params.width).toInt()
- binding.fragmentContainer.layoutParams = params
-
- constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
- "区域配置成功".show(this)
- val intent = Intent()
- setResult(RESULT_OK, intent)
- finish()
- }
- }
- }
-
- override fun initEvent() {
- binding.startRtspButton.setOnClickListener {
- if (isStarted) {
- binding.videoSurfaceView.stopPlayback()
- binding.videoSurfaceView.clearFocus()
- isStarted = false
- binding.startRtspButton.text = "打开摄像头"
- } else {
- //播放RTSP流
- binding.videoSurfaceView.setVideoURI(
- //rtsp://admin:admin@192.168.10.137:554/h264/ch1/main/av_stream
- //rtsp://192.168.10.137:554/live/site
- Uri.parse("rtsp://192.168.10.137:554/live/site")
- )
- }
- }
-
- binding.videoSurfaceView.setOnPreparedListener {
- binding.videoSurfaceView.requestFocus()
- binding.videoSurfaceView.start()
- isStarted = true
- binding.startRtspButton.text = "关闭摄像头"
- }
-
- binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
-
- constructionCheckViewModel.setVideoRegion(this, region)
- }
- }
-
- override fun initViewBinding(): ActivityVideoBoundaryBinding {
- return ActivityVideoBoundaryBinding.inflate(layoutInflater)
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener {
- override fun onLeftClick() {
- finish()
- }
-
- override fun onRightClick() {
-
- }
- })
- }
-
- override fun onDestroy() {
- super.onDestroy()
- binding.videoSurfaceView.suspend()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
index 34b9b5f..9ded0c3 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkTaskActivity.kt
@@ -13,7 +13,7 @@
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.service.TcpMessageService
import com.casic.br.operationsite.utils.RuntimeCache
-import com.casic.br.operationsite.view.check.DisclosureActivity
+import com.casic.br.operationsite.view.check.GuardiansActivity
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
@@ -125,7 +125,8 @@
position: Int, t: WorkSiteListModel.DataModel.RowsModel
) {
RuntimeCache.projectId = t.id
- navigatePageTo()
+// navigatePageTo()
+ navigatePageTo()
}
})
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
index e881698..c9fa134 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt
@@ -51,6 +51,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private var isFirstConfirm = false
private var isSecondConfirm = false
private var isThirdConfirm = false
@@ -84,7 +85,7 @@
return@setOnClickListener
}
SocketManager.get.send(LocaleConstant.START_ENV_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_environment")
+ constructionCheckViewModel.setCurrentPhase("before_operation_environment")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -156,13 +157,15 @@
binding.videoView.start()
}
- initWebSocket()
-
timer = Timer()
workSiteViewModel = ViewModelProvider(this)[WorkSiteViewModel::class.java]
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -203,6 +206,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@EnvironmentActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -220,6 +224,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
index ef18670..93e94c7 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt
@@ -29,7 +29,6 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.saveImage
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.ActivityStackManager
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.widget.TitleBarView
@@ -58,6 +57,7 @@
private lateinit var workSiteViewModel: WorkSiteViewModel
private lateinit var imageAdapter: EditableImageAdapter
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private lateinit var timer: Timer
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
@@ -73,15 +73,18 @@
alarmViewModel.changeAlarmState("", state)
}
+ binding.clearVideoRegionButton.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+
binding.setVideoRegionButton.setOnClickListener {
val region = binding.regionView.getConfirmedPoints()
- Log.d(kTag, region.toJson())
- constructionCheckViewModel.setVideoRegion(this, region)
+ constructionCheckViewModel.setVideoRegion(region)
}
binding.startVideoCheckButton.setOnClickListener {
- constructionCheckViewModel.setCurrentPhase(this, "in_operation")
+ constructionCheckViewModel.setCurrentPhase("in_operation")
}
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
@@ -132,17 +135,22 @@
binding.videoView.requestFocus()
binding.videoView.start()
}
- initWebSocket()
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- alarmViewModel.alarmState.observe(this) {
- }
+ binding.alarmCheckbox.isChecked = true
constructionCheckViewModel = ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- constructionCheckViewModel.postResult.observe(this) {
- if (it.code == 200) {
+ constructionCheckViewModel.setVideoRegionResult.observe(this) {
+ if (it) {
"区域配置成功".show(this)
+ } else {
+ "区域配置成功,请联系技术人员".show(this)
+ }
+ }
+ constructionCheckViewModel.setCurrentPhaseResult.observe(this) {
+ if (it) {
+ "监护人员检测开启成功".show(this)
}
}
@@ -159,6 +167,10 @@
timer.schedule(object : TimerTask() {
override fun run() {
workSiteViewModel.getWorkers(context, RuntimeCache.projectId)
+
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
}
}, 0, 5000)
workSiteViewModel.workerResult.observe(this) {
@@ -183,13 +195,15 @@
LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
try {
- val bitmapArray = Base64.decode((msg.obj as String), Base64.DEFAULT)
+ val base64 = (msg.obj as String).split(":")[1]
+ val bitmapArray = Base64.decode(base64, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size)
val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png"
Log.d(kTag, "imagePath: $imagePath")
bitmap.saveImage(imagePath)
if (recyclerViewImages.size == 3) {
- recyclerViewImages.removeAt(0)
+ recyclerViewImages.removeFirst()
+ imageAdapter.notifyDataSetChanged()
}
recyclerViewImages.add(imagePath)
imageAdapter.notifyDataSetChanged()
@@ -213,6 +227,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@GuardiansActivity.webSocket = webSocket
+ isWebSocketConnected = true
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -230,6 +245,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -260,11 +276,6 @@
})
}
- override fun onResume() {
- super.onResume()
- alarmViewModel.getAlarmState(this)
- }
-
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
index 433ea5c..b93c694 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt
@@ -44,6 +44,8 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
+import java.util.Timer
+import java.util.TimerTask
import java.util.concurrent.TimeUnit
class SuppliesActivity : KotlinBaseActivity(), Handler.Callback {
@@ -53,7 +55,9 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var constructionCheckViewModel: ConstructionCheckViewModel
private lateinit var imageAdapter: EditableImageAdapter
+ private lateinit var timer: Timer
private var webSocket: WebSocket? = null
+ private var isWebSocketConnected = false
private val timeFormat by lazy { SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA) }
private val marginOffset by lazy { 1.dp2px(this) }
private val recyclerViewImages: ArrayList = ArrayList() //真实图片路径
@@ -96,7 +100,7 @@
) {
Log.d(kTag, "startVideoLauncher: ")
SocketManager.get.send(LocaleConstant.START_VIDEO_COMMAND)
- constructionCheckViewModel.setCurrentPhase(this, "before_operation_protection")
+ constructionCheckViewModel.setCurrentPhase("before_operation_protection")
//播放RTSP流
binding.videoView.setVideoURI(Uri.parse("rtsp://192.168.10.137:554"))
}
@@ -114,6 +118,7 @@
override fun onOpen(webSocket: WebSocket, response: Response) {
super.onOpen(webSocket, response)
this@SuppliesActivity.webSocket = webSocket
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
}
@@ -131,6 +136,7 @@
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
super.onFailure(webSocket, t, response)
+ isWebSocketConnected = false
lifecycleScope.launch(Dispatchers.Main) {
weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
}
@@ -147,13 +153,20 @@
constructionCheckViewModel =
ViewModelProvider(this)[ConstructionCheckViewModel::class.java]
- initWebSocket()
-
binding.videoView.setOnPreparedListener {
binding.videoView.requestFocus()
binding.videoView.start()
}
+ timer = Timer()
+ timer.schedule(object : TimerTask() {
+ override fun run() {
+ if (!isWebSocketConnected) {
+ initWebSocket()
+ }
+ }
+ }, 0, 5000)
+
//左右边距
val viewWidth = getScreenWidth() - (15 + 15).dp2px(this)
imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 6, 3)
@@ -228,6 +241,7 @@
override fun onDestroy() {
super.onDestroy()
binding.videoView.suspend()
+ timer.cancel()
webSocket?.close(1000, null)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
index 7014945..a29dde0 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/AlarmViewModel.kt
@@ -19,7 +19,6 @@
private val gson = Gson()
val alarmModel = MutableLiveData()
val detailModel = MutableLiveData()
- val alarmState = MutableLiveData()
fun getAlarmListByPage(context: Context, keywords: String, page: Int) = launch({
loadState.value = LoadState.Loading
@@ -66,19 +65,4 @@
fun changeAlarmState(deviceIp: String, state: String) = launch({
RetrofitServiceManager.changeAlarmState(state)
})
-
- fun getAlarmState(context: Context) = launch({
- val response = RetrofitServiceManager.getAlarmState()
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
index 8317578..c448bfa 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/ConstructionCheckViewModel.kt
@@ -1,47 +1,26 @@
package com.casic.br.operationsite.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.operationsite.extensions.getResponseCode
-import com.casic.br.operationsite.extensions.getResponseMessage
-import com.casic.br.operationsite.model.CommonResultModel
import com.casic.br.operationsite.retrofit.RetrofitServiceManager
-import com.google.gson.Gson
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
class ConstructionCheckViewModel : BaseViewModel() {
- private val gson by lazy { Gson() }
- val postResult = MutableLiveData()
+ val setCurrentPhaseResult = MutableLiveData()
+ val setVideoRegionResult = MutableLiveData()
- fun setCurrentPhase(context: Context, phase: String) = launch({
- val response = RetrofitServiceManager.setCurrentPhase(phase)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setVideoRegion(position: ArrayList) = launch({
+ val response = RetrofitServiceManager.setVideoRegion(position)
+ setVideoRegionResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
- fun setVideoRegion(context: Context, position: ArrayList) = launch({
- val response = RetrofitServiceManager.setVideoRegion(position)
- when (response.getResponseCode()) {
- 200 -> {
-
- }
-
- else -> {
- response.getResponseMessage().show(context)
- }
- }
+ fun setCurrentPhase(phase: String) = launch({
+ val response = RetrofitServiceManager.setCurrentPhase(phase)
+ setCurrentPhaseResult.value = response.getResponseCode() == 200
}, {
it.printStackTrace()
})
diff --git a/app/src/main/res/layout/activity_construction_check.xml b/app/src/main/res/layout/activity_construction_check.xml
deleted file mode 100644
index 2e163a6..0000000
--- a/app/src/main/res/layout/activity_construction_check.xml
+++ /dev/null
@@ -1,418 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_guardians.xml b/app/src/main/res/layout/activity_guardians.xml
index 4474864..3aa3799 100644
--- a/app/src/main/res/layout/activity_guardians.xml
+++ b/app/src/main/res/layout/activity_guardians.xml
@@ -16,7 +16,7 @@
app:tbv_only_show_title="false"
app:tbv_show_left_image="true"
app:tbv_show_right_image="false"
- app:tbv_text="作业中监护人员检测"
+ app:tbv_text="监护人员检测"
app:tbv_text_color="@color/white"
app:tbv_text_size="@dimen/sp_18" />
@@ -65,13 +65,31 @@
android:text="声光报警" />
-
+ android:orientation="horizontal">
+
+
+
+
+