diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
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 7906a31..9575c82 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
@@ -86,7 +86,7 @@
fun changeAlarmState(context: Context, deviceIp: String, state: String) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.changeAlarmState(deviceIp, state)
+ val response = RetrofitServiceManager.changeAlarmState(state)
when (response.getResponseCode()) {
200 -> {
gson.fromJson(
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
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 7906a31..9575c82 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
@@ -86,7 +86,7 @@
fun changeAlarmState(context: Context, deviceIp: String, state: String) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.changeAlarmState(deviceIp, state)
+ val response = RetrofitServiceManager.changeAlarmState(state)
when (response.getResponseCode()) {
200 -> {
gson.fromJson(
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
index e001ace..69e40d7 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
@@ -18,9 +18,9 @@
private val gson by lazy { Gson() }
val postResult = MutableLiveData()
- fun postRegion(context: Context, code: String, color: String, position: String) = launch({
+ fun postRegion(context: Context, position: FloatArray) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.postRegion(code, color, position)
+ val response = RetrofitServiceManager.setVideoRegion(position)
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
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 7906a31..9575c82 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
@@ -86,7 +86,7 @@
fun changeAlarmState(context: Context, deviceIp: String, state: String) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.changeAlarmState(deviceIp, state)
+ val response = RetrofitServiceManager.changeAlarmState(state)
when (response.getResponseCode()) {
200 -> {
gson.fromJson(
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
index e001ace..69e40d7 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
@@ -18,9 +18,9 @@
private val gson by lazy { Gson() }
val postResult = MutableLiveData()
- fun postRegion(context: Context, code: String, color: String, position: String) = launch({
+ fun postRegion(context: Context, position: FloatArray) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.postRegion(code, color, position)
+ val response = RetrofitServiceManager.setVideoRegion(position)
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/button_check_selector.xml b/app/src/main/res/drawable/button_check_selector.xml
new file mode 100644
index 0000000..731982b
--- /dev/null
+++ b/app/src/main/res/drawable/button_check_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
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 7906a31..9575c82 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
@@ -86,7 +86,7 @@
fun changeAlarmState(context: Context, deviceIp: String, state: String) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.changeAlarmState(deviceIp, state)
+ val response = RetrofitServiceManager.changeAlarmState(state)
when (response.getResponseCode()) {
200 -> {
gson.fromJson(
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
index e001ace..69e40d7 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
@@ -18,9 +18,9 @@
private val gson by lazy { Gson() }
val postResult = MutableLiveData()
- fun postRegion(context: Context, code: String, color: String, position: String) = launch({
+ fun postRegion(context: Context, position: FloatArray) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.postRegion(code, color, position)
+ val response = RetrofitServiceManager.setVideoRegion(position)
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/button_check_selector.xml b/app/src/main/res/drawable/button_check_selector.xml
new file mode 100644
index 0000000..731982b
--- /dev/null
+++ b/app/src/main/res/drawable/button_check_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_construction_check.xml b/app/src/main/res/layout/activity_construction_check.xml
new file mode 100644
index 0000000..5696bbb
--- /dev/null
+++ b/app/src/main/res/layout/activity_construction_check.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b45866e..68f09d4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -75,6 +75,7 @@
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
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 7906a31..9575c82 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
@@ -86,7 +86,7 @@
fun changeAlarmState(context: Context, deviceIp: String, state: String) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.changeAlarmState(deviceIp, state)
+ val response = RetrofitServiceManager.changeAlarmState(state)
when (response.getResponseCode()) {
200 -> {
gson.fromJson(
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
index e001ace..69e40d7 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
@@ -18,9 +18,9 @@
private val gson by lazy { Gson() }
val postResult = MutableLiveData()
- fun postRegion(context: Context, code: String, color: String, position: String) = launch({
+ fun postRegion(context: Context, position: FloatArray) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.postRegion(code, color, position)
+ val response = RetrofitServiceManager.setVideoRegion(position)
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/button_check_selector.xml b/app/src/main/res/drawable/button_check_selector.xml
new file mode 100644
index 0000000..731982b
--- /dev/null
+++ b/app/src/main/res/drawable/button_check_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_construction_check.xml b/app/src/main/res/layout/activity_construction_check.xml
new file mode 100644
index 0000000..5696bbb
--- /dev/null
+++ b/app/src/main/res/layout/activity_construction_check.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml
index 9c08857..2ee51fa 100644
--- a/app/src/main/res/layout/activity_site_tab.xml
+++ b/app/src/main/res/layout/activity_site_tab.xml
@@ -92,11 +92,29 @@
-
+ android:layout_weight="1">
+
+
+
+
+
+
): String
-
- /**
- * 提交算法区域
- */
- @POST("/set_position")
- suspend fun postRegion(@Body requestBody: RequestBody): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
index 5abd3a4..c09fb28 100644
--- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt
@@ -26,6 +26,13 @@
RetrofitFactory.createRetrofit(httpConfig)
}
+ private val aiApi by lazy {
+ val httpConfig = SaveKeyValues.getValue(
+ LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
+ ) as String
+ RetrofitFactory.createRetrofit(httpConfig)
+ }
+
/**
* 验证PublicKey
*/
@@ -130,38 +137,6 @@
}
/**
- * 声光报警开关
- */
- suspend fun changeAlarmState(deviceIp: String, state: String): String {
- val param = JsonObject()
- param.addProperty("deviceIp", deviceIp)
- param.addProperty("state", state)
-
- val requestBody = param.toString().toRequestBody(
- "application/json;charset=UTF-8".toMediaType()
- )
-
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.changeAlarmState(requestBody)
- }
-
- /**
- * 声光报警开关状态
- */
- suspend fun getAlarmState(): String {
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.getAlarmState()
- }
-
- /**
* 上传图片
*/
suspend fun uploadImage(image: File): String {
@@ -253,21 +228,52 @@
return api.enter(AuthenticationHelper.token!!, requestBody, projectIdMap)
}
- suspend fun postRegion(code: String, color: String, position: String): String {
+ /**
+ * 设置当前阶段
+ */
+ suspend fun setCurrentPhase(phase: String): String {
val param = JsonObject()
- param.addProperty("code", code)
- param.addProperty("color", color)
- param.addProperty("position", position)
+ param.addProperty("phase", phase)
val requestBody = param.toString().toRequestBody(
"application/json;charset=UTF-8".toMediaType()
)
- val host = SaveKeyValues.getValue(LocaleConstant.TCP_HOST, "192.168.10.133").toString()
- val regionApi by lazy {
- val httpConfig = "http://${host}:5000"
- RetrofitFactory.createRetrofit(httpConfig)
- }
- return regionApi.postRegion(requestBody)
+ return aiApi.setCurrentPhase(requestBody)
+ }
+
+ /**
+ * 设置声光报警开关
+ */
+ suspend fun changeAlarmState(state: String): String {
+ val param = JsonObject()
+ param.addProperty("state", state)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+
+ return aiApi.changeAlarmState(requestBody)
+ }
+
+ /**
+ * 声光报警开关状态
+ */
+ suspend fun getAlarmState(): String {
+ return aiApi.getAlarmState()
+ }
+
+ /**
+ * 设置区域
+ * */
+ suspend fun setVideoRegion(position: FloatArray): String {
+ val param = JsonObject()
+ val typeToken = object : TypeToken() {}.type
+ param.add("positions", gson.toJsonTree(position, typeToken).asJsonArray)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return aiApi.postRegion(requestBody)
}
}
\ No newline at end of file
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 2fc3bef..ee3e446 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
@@ -45,10 +45,12 @@
)
}
-// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api"
+ // 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 AI_BASE_URL = "http://192.168.10.138:5000"
const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val AI_SERVER_CONFIG = "aiServerConfig"
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val SEARCH_ACTION = "searchAction"
@@ -64,4 +66,8 @@
const val WIFI_PASSWORD = "zhsz20311hw"
const val TCP_HOST = "tcpServer"
const val TCP_PORT = 9000
+
+ //施工交底
+ val START_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
+ val END_CONSTRUCTION_COMMAND = byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
index de0d549..b33be84 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/tcp/SocketManager.kt
@@ -1,7 +1,7 @@
package com.casic.br.operationsite.utils.tcp
import android.util.Log
-import com.casic.br.operationsite.view.MethaneActivity
+import com.casic.br.operationsite.view.ConstructionCheckActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -16,7 +16,7 @@
val get by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { SocketManager() }
}
- fun connectNetty(hostname: String, port: Int) {
+ fun connectTcpServer(hostname: String, port: Int) {
Thread {
if (!nettyClient.connectStatus) {
nettyClient.setSocketListener(this)
@@ -35,12 +35,7 @@
if (statusCode == ISocketListener.STATUS_CONNECT_SUCCESS) {
if (nettyClient.connectStatus) {
Log.d(kTag, "连接成功")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072101)
- }
- } else {
- if (!nettyClient.connectStatus) {
- Log.e(kTag, "onServiceStatusConnectChanged:$statusCode,连接断开,正在重连")
- MethaneActivity.weakReferenceHandler.sendEmptyMessage(2023072102)
+ ConstructionCheckActivity.weakReferenceHandler.sendEmptyMessage(2024061801)
}
}
}
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
new file mode 100644
index 0000000..5be0440
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/ConstructionCheckActivity.kt
@@ -0,0 +1,125 @@
+package com.casic.br.operationsite.view
+
+import android.os.Bundle
+import android.os.Handler
+import android.os.Message
+import android.util.Log
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.callback.OnImageCompressListener
+import com.casic.br.operationsite.databinding.ActivityConstructionCheckBinding
+import com.casic.br.operationsite.extensions.compressImage
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.tcp.SocketManager
+import com.casic.br.operationsite.vm.UploadFileViewModel
+import com.gyf.immersionbar.ImmersionBar
+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.utils.ActivityStackManager
+import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import java.io.File
+
+class ConstructionCheckActivity : KotlinBaseActivity(),
+ Handler.Callback {
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ private val kTag = "ConstructionCheckActivity"
+ private val context = this
+ private lateinit var uploadFileViewModel: UploadFileViewModel
+
+ override fun initEvent() {
+ binding.startCheckButton.setOnClickListener {
+ when (binding.startCheckTextView.text) {
+ "开始交底" -> {
+ //连接TCP服务
+ LoadingDialogHub.show(this, "处理中,请稍后...")
+ SocketManager.get.connectTcpServer("192.168.154.158", LocaleConstant.TCP_PORT)
+ }
+
+ "拍照确认" -> {
+ PictureSelector.create(context).openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ result?.apply {
+ analyticalSelectResults(first())
+ }
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+
+ "确认完交底" -> {
+ //发送指令
+ SocketManager.get.send(LocaleConstant.END_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "开始交底"
+ }
+ }
+ }
+ }
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ result.realPath.compressImage(this, object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ uploadFileViewModel.uploadImage(context, file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2024061801) {
+ //成功
+ LoadingDialogHub.dismiss()
+ //发送指令
+ SocketManager.get.send(LocaleConstant.START_CONSTRUCTION_COMMAND)
+ binding.startCheckTextView.text = "拍照确认"
+ }
+ return true
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ ActivityStackManager.addActivity(this)
+ weakReferenceHandler = WeakReferenceHandler(this)
+
+ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java]
+ uploadFileViewModel.resultModel.observe(this) {
+ if (it.code == 200) {
+ val url = it.data.toString()
+ if (url.isNotBlank()) {
+ Log.d(kTag, "url: $url")
+ binding.startCheckTextView.text = "确认完交底"
+ }
+ }
+ }
+ }
+
+ 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() {
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
index 73953df..d08a8b4 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt
@@ -132,7 +132,7 @@
SaveKeyValues.putValue(LocaleConstant.TCP_HOST, value)
- SocketManager.get.connectNetty(value, LocaleConstant.TCP_PORT)
+ SocketManager.get.connectTcpServer(value, LocaleConstant.TCP_PORT)
}
val bottomActionSheet =
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
index 76ab644..426f3fd 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -10,11 +10,11 @@
import android.net.wifi.WifiNetworkSpecifier
import android.os.Build
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.extensions.reformatFloatArray
import com.casic.br.operationsite.utils.DeviceType
import com.casic.br.operationsite.utils.LocaleConstant
import com.casic.br.operationsite.utils.RuntimeCache
@@ -24,11 +24,13 @@
import com.pengxh.kt.lite.extensions.getScreenWidth
import com.pengxh.kt.lite.extensions.getSystemService
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.widget.dialog.BottomActionSheet
class VideoBoundaryActivity : KotlinBaseActivity() {
+ private val kTag = "VideoBoundaryActivity"
private val context = this@VideoBoundaryActivity
private val wifiManager by lazy { getSystemService() }
private val wifiSsids = ArrayList()
@@ -111,10 +113,10 @@
}
binding.saveCameraRegionButton.setOnClickListener {
- val region = binding.regionView.getConfirmedPoints()
- val data = region.reformatFloatArray()
+ val region = binding.regionView.getConfirmedRegion()
+ Log.d(kTag, region.toJson())
- regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+// regionViewModel.postRegion(region)
}
}
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 14f4cbd..0343f09 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -361,6 +361,10 @@
}
override fun initEvent() {
+ binding.floatingActionButton.setOnClickListener {
+ navigatePageTo()
+ }
+
binding.alarmTextView.setOnClickListener {
navigatePageTo()
}
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 7906a31..9575c82 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
@@ -86,7 +86,7 @@
fun changeAlarmState(context: Context, deviceIp: String, state: String) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.changeAlarmState(deviceIp, state)
+ val response = RetrofitServiceManager.changeAlarmState(state)
when (response.getResponseCode()) {
200 -> {
gson.fromJson(
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
index e001ace..69e40d7 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/RegionViewModel.kt
@@ -18,9 +18,9 @@
private val gson by lazy { Gson() }
val postResult = MutableLiveData()
- fun postRegion(context: Context, code: String, color: String, position: String) = launch({
+ fun postRegion(context: Context, position: FloatArray) = launch({
loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.postRegion(code, color, position)
+ val response = RetrofitServiceManager.setVideoRegion(position)
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
diff --git a/app/src/main/res/drawable/button_check_selector.xml b/app/src/main/res/drawable/button_check_selector.xml
new file mode 100644
index 0000000..731982b
--- /dev/null
+++ b/app/src/main/res/drawable/button_check_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_construction_check.xml b/app/src/main/res/layout/activity_construction_check.xml
new file mode 100644
index 0000000..5696bbb
--- /dev/null
+++ b/app/src/main/res/layout/activity_construction_check.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml
index 9c08857..2ee51fa 100644
--- a/app/src/main/res/layout/activity_site_tab.xml
+++ b/app/src/main/res/layout/activity_site_tab.xml
@@ -92,11 +92,29 @@
-
+ android:layout_weight="1">
+
+
+
+
+