diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
index dd2dedd..6508312 100644
--- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
@@ -4,7 +4,7 @@
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.extensions.getResponseMessage
-import com.casic.br.app.model.AddHiddenTroubleModel
+import com.casic.br.app.model.AddHiddenTroubleResultModel
import com.casic.br.app.model.HiddenTroubleDetailModel
import com.casic.br.app.model.HiddenTroubleModel
import com.casic.br.app.retrofit.RetrofitServiceManager
@@ -18,7 +18,7 @@
class HiddenTroubleViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val addTroubleResult = MutableLiveData()
+ val addTroubleResult = MutableLiveData()
val troublesResult = MutableLiveData()
val troubleDetailResult = MutableLiveData()
@@ -41,8 +41,8 @@
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
- addTroubleResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
+ addTroubleResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
)
}
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
index dd2dedd..6508312 100644
--- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
@@ -4,7 +4,7 @@
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.extensions.getResponseMessage
-import com.casic.br.app.model.AddHiddenTroubleModel
+import com.casic.br.app.model.AddHiddenTroubleResultModel
import com.casic.br.app.model.HiddenTroubleDetailModel
import com.casic.br.app.model.HiddenTroubleModel
import com.casic.br.app.retrofit.RetrofitServiceManager
@@ -18,7 +18,7 @@
class HiddenTroubleViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val addTroubleResult = MutableLiveData()
+ val addTroubleResult = MutableLiveData()
val troublesResult = MutableLiveData()
val troubleDetailResult = MutableLiveData()
@@ -41,8 +41,8 @@
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
- addTroubleResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
+ addTroubleResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
)
}
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index e6a5ed6..8821e65 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -21,27 +21,28 @@
val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getRecognizeResult(context: Context, base64: String, scene: String) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
+ fun getRecognizeResult(context: Context, base64: String, scene: String, xujian_id: String) =
+ launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getRecognizeResult(base64, scene, xujian_id)
+ when (response.getResponseCode()) {
+ 200 -> {
+ loadState.value = LoadState.Success
+ recognizeResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ }
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
+ else -> {
+ val element = JsonParser.parseString(response)
+ val jsonObject = element.asJsonObject
+ jsonObject.get("result").asString.show(context)
+ loadState.value = LoadState.Fail
+ }
}
- }
- }, {
- loadState.value = LoadState.Fail
- })
+ }, {
+ loadState.value = LoadState.Fail
+ })
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
index dd2dedd..6508312 100644
--- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
@@ -4,7 +4,7 @@
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.extensions.getResponseMessage
-import com.casic.br.app.model.AddHiddenTroubleModel
+import com.casic.br.app.model.AddHiddenTroubleResultModel
import com.casic.br.app.model.HiddenTroubleDetailModel
import com.casic.br.app.model.HiddenTroubleModel
import com.casic.br.app.retrofit.RetrofitServiceManager
@@ -18,7 +18,7 @@
class HiddenTroubleViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val addTroubleResult = MutableLiveData()
+ val addTroubleResult = MutableLiveData()
val troublesResult = MutableLiveData()
val troubleDetailResult = MutableLiveData()
@@ -41,8 +41,8 @@
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
- addTroubleResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
+ addTroubleResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
)
}
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index e6a5ed6..8821e65 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -21,27 +21,28 @@
val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getRecognizeResult(context: Context, base64: String, scene: String) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
+ fun getRecognizeResult(context: Context, base64: String, scene: String, xujian_id: String) =
+ launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getRecognizeResult(base64, scene, xujian_id)
+ when (response.getResponseCode()) {
+ 200 -> {
+ loadState.value = LoadState.Success
+ recognizeResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ }
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
+ else -> {
+ val element = JsonParser.parseString(response)
+ val jsonObject = element.asJsonObject
+ jsonObject.get("result").asString.show(context)
+ loadState.value = LoadState.Fail
+ }
}
- }
- }, {
- loadState.value = LoadState.Fail
- })
+ }, {
+ loadState.value = LoadState.Fail
+ })
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
new file mode 100644
index 0000000..8be3433
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
@@ -0,0 +1,60 @@
+package com.casic.br.app.vm
+
+import android.content.Context
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.app.extensions.getResponseCode
+import com.casic.br.app.extensions.getResponseMessage
+import com.casic.br.app.model.AddInspectionResultModel
+import com.casic.br.app.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.base.BaseViewModel
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.LoadState
+
+/**
+ * 巡检VM
+ * */
+class InspectionViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val addResultModel = MutableLiveData()
+
+ fun startInspection(
+ context: Context,
+ inspectionUser: String,
+ inspectionAddress: String,
+ inspectionDate: String,
+ startTime: String
+ ) = launch({
+ val response = RetrofitServiceManager.addRecord(
+ inspectionUser, inspectionAddress, inspectionDate, startTime
+ )
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ addResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ fun stopInspection(context: Context, inspectionId: String, endTime: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.stopInspection(inspectionId, endTime)
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.localizedMessage?.show(context)
+ })
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
index dd2dedd..6508312 100644
--- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
@@ -4,7 +4,7 @@
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.extensions.getResponseMessage
-import com.casic.br.app.model.AddHiddenTroubleModel
+import com.casic.br.app.model.AddHiddenTroubleResultModel
import com.casic.br.app.model.HiddenTroubleDetailModel
import com.casic.br.app.model.HiddenTroubleModel
import com.casic.br.app.retrofit.RetrofitServiceManager
@@ -18,7 +18,7 @@
class HiddenTroubleViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val addTroubleResult = MutableLiveData()
+ val addTroubleResult = MutableLiveData()
val troublesResult = MutableLiveData()
val troubleDetailResult = MutableLiveData()
@@ -41,8 +41,8 @@
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
- addTroubleResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
+ addTroubleResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
)
}
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index e6a5ed6..8821e65 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -21,27 +21,28 @@
val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getRecognizeResult(context: Context, base64: String, scene: String) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
+ fun getRecognizeResult(context: Context, base64: String, scene: String, xujian_id: String) =
+ launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getRecognizeResult(base64, scene, xujian_id)
+ when (response.getResponseCode()) {
+ 200 -> {
+ loadState.value = LoadState.Success
+ recognizeResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ }
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
+ else -> {
+ val element = JsonParser.parseString(response)
+ val jsonObject = element.asJsonObject
+ jsonObject.get("result").asString.show(context)
+ loadState.value = LoadState.Fail
+ }
}
- }
- }, {
- loadState.value = LoadState.Fail
- })
+ }, {
+ loadState.value = LoadState.Fail
+ })
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
new file mode 100644
index 0000000..8be3433
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
@@ -0,0 +1,60 @@
+package com.casic.br.app.vm
+
+import android.content.Context
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.app.extensions.getResponseCode
+import com.casic.br.app.extensions.getResponseMessage
+import com.casic.br.app.model.AddInspectionResultModel
+import com.casic.br.app.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.base.BaseViewModel
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.LoadState
+
+/**
+ * 巡检VM
+ * */
+class InspectionViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val addResultModel = MutableLiveData()
+
+ fun startInspection(
+ context: Context,
+ inspectionUser: String,
+ inspectionAddress: String,
+ inspectionDate: String,
+ startTime: String
+ ) = launch({
+ val response = RetrofitServiceManager.addRecord(
+ inspectionUser, inspectionAddress, inspectionDate, startTime
+ )
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ addResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ fun stopInspection(context: Context, inspectionId: String, endTime: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.stopInspection(inspectionId, endTime)
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.localizedMessage?.show(context)
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt
deleted file mode 100644
index 43e5881..0000000
--- a/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.br.app.widgets
-
-import android.app.Dialog
-import android.content.Context
-import android.os.Bundle
-import com.casic.br.app.databinding.DialogCheckResultBinding
-import com.pengxh.kt.lite.extensions.binding
-import com.pengxh.kt.lite.extensions.initDialogLayoutParams
-
-class CheckResultDialog constructor(context: Context) : Dialog(context) {
-
- private val binding: DialogCheckResultBinding by binding()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.initDialogLayoutParams(1f)
- setCanceledOnTouchOutside(false)
-
- binding.dialogConfirmButton.setOnClickListener {
- dismiss()
- }
-
- binding.dialogCancelButton.setOnClickListener { dismiss() }
- }
-}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
index dd2dedd..6508312 100644
--- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
@@ -4,7 +4,7 @@
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.extensions.getResponseMessage
-import com.casic.br.app.model.AddHiddenTroubleModel
+import com.casic.br.app.model.AddHiddenTroubleResultModel
import com.casic.br.app.model.HiddenTroubleDetailModel
import com.casic.br.app.model.HiddenTroubleModel
import com.casic.br.app.retrofit.RetrofitServiceManager
@@ -18,7 +18,7 @@
class HiddenTroubleViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val addTroubleResult = MutableLiveData()
+ val addTroubleResult = MutableLiveData()
val troublesResult = MutableLiveData()
val troubleDetailResult = MutableLiveData()
@@ -41,8 +41,8 @@
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
- addTroubleResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
+ addTroubleResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
)
}
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index e6a5ed6..8821e65 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -21,27 +21,28 @@
val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getRecognizeResult(context: Context, base64: String, scene: String) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
+ fun getRecognizeResult(context: Context, base64: String, scene: String, xujian_id: String) =
+ launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getRecognizeResult(base64, scene, xujian_id)
+ when (response.getResponseCode()) {
+ 200 -> {
+ loadState.value = LoadState.Success
+ recognizeResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ }
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
+ else -> {
+ val element = JsonParser.parseString(response)
+ val jsonObject = element.asJsonObject
+ jsonObject.get("result").asString.show(context)
+ loadState.value = LoadState.Fail
+ }
}
- }
- }, {
- loadState.value = LoadState.Fail
- })
+ }, {
+ loadState.value = LoadState.Fail
+ })
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
new file mode 100644
index 0000000..8be3433
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
@@ -0,0 +1,60 @@
+package com.casic.br.app.vm
+
+import android.content.Context
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.app.extensions.getResponseCode
+import com.casic.br.app.extensions.getResponseMessage
+import com.casic.br.app.model.AddInspectionResultModel
+import com.casic.br.app.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.base.BaseViewModel
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.LoadState
+
+/**
+ * 巡检VM
+ * */
+class InspectionViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val addResultModel = MutableLiveData()
+
+ fun startInspection(
+ context: Context,
+ inspectionUser: String,
+ inspectionAddress: String,
+ inspectionDate: String,
+ startTime: String
+ ) = launch({
+ val response = RetrofitServiceManager.addRecord(
+ inspectionUser, inspectionAddress, inspectionDate, startTime
+ )
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ addResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ fun stopInspection(context: Context, inspectionId: String, endTime: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.stopInspection(inspectionId, endTime)
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.localizedMessage?.show(context)
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt
deleted file mode 100644
index 43e5881..0000000
--- a/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.br.app.widgets
-
-import android.app.Dialog
-import android.content.Context
-import android.os.Bundle
-import com.casic.br.app.databinding.DialogCheckResultBinding
-import com.pengxh.kt.lite.extensions.binding
-import com.pengxh.kt.lite.extensions.initDialogLayoutParams
-
-class CheckResultDialog constructor(context: Context) : Dialog(context) {
-
- private val binding: DialogCheckResultBinding by binding()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.initDialogLayoutParams(1f)
- setCanceledOnTouchOutside(false)
-
- binding.dialogConfirmButton.setOnClickListener {
- dismiss()
- }
-
- binding.dialogCancelButton.setOnClickListener { dismiss() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_check_result.xml b/app/src/main/res/layout/activity_check_result.xml
new file mode 100644
index 0000000..8b0dc1d
--- /dev/null
+++ b/app/src/main/res/layout/activity_check_result.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 7eb76a3..4809425 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -104,4 +104,6 @@
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
//图片压缩
implementation 'top.zibin:Luban:1.1.8'
+ //高德导航、定位、地图三合一
+ implementation 'com.amap.api:navi-3dmap:latest.integration'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 922f1f1..2a1bb1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,20 +24,22 @@
android:name="android.permission.READ_MEDIA_VIDEO"
android:minSdkVersion="33" />
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
deleted file mode 100644
index b6acdd9..0000000
--- a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.br.app.model;
-
-public class AddHiddenTroubleModel {
-
- private int code;
- private String data;
- private String message;
- private boolean success;
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getData() {
- return data;
- }
-
- public void setData(String data) {
- this.data = data;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public boolean isSuccess() {
- return success;
- }
-
- public void setSuccess(boolean success) {
- this.success = success;
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
new file mode 100644
index 0000000..86c8add
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddHiddenTroubleResultModel.java
@@ -0,0 +1,41 @@
+package com.casic.br.app.model;
+
+public class AddHiddenTroubleResultModel {
+
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
new file mode 100644
index 0000000..2fd38c5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/model/AddInspectionResultModel.java
@@ -0,0 +1,40 @@
+package com.casic.br.app.model;
+
+public class AddInspectionResultModel {
+ private int code;
+ private String data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index cf194ff..5e7055c 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -64,6 +64,24 @@
): String
/**
+ * 新建巡检
+ */
+ @POST("/inspection-record/addRecord")
+ suspend fun addRecord(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
+ * 结束巡检
+ */
+ @POST("/inspection-record/updateRecord")
+ suspend fun stopInspection(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
+
+ /**
* 添加隐患
*/
@POST("/inspection-record/addAlarm")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index 0856595..b740e6a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -89,6 +89,38 @@
}
/**
+ * 新建巡检
+ */
+ suspend fun addRecord(
+ inspectionUser: String, inspectionAddress: String, inspectionDate: String, startTime: String
+ ): String {
+ val param = JsonObject()
+ param.addProperty("inspectionUser", inspectionUser)
+ param.addProperty("inspectionAddress", inspectionAddress)
+ param.addProperty("inspectionDate", inspectionDate)
+ param.addProperty("startTime", startTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addRecord(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
+ * 结束巡检
+ */
+ suspend fun stopInspection(inspectionId: String, endTime: String): String {
+ val param = JsonObject()
+ param.addProperty("id", inspectionId)
+ param.addProperty("endTime", endTime)
+
+ val requestBody = param.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.stopInspection(AuthenticationHelper.token, requestBody)
+ }
+
+ /**
* 添加隐患
*/
suspend fun addHiddenTrouble(
@@ -161,10 +193,11 @@
/**
* 获取画面识别结果
* */
- suspend fun getRecognizeResult(base64: String, scene: String): String {
+ suspend fun getRecognizeResult(base64: String, scene: String, xujian_id: String): String {
val map: MutableMap = mutableMapOf()
map["img"] = "data:image/png;base64,${base64}".toRequestBody()
map["scene"] = scene.toRequestBody()
+ map["xujian_id"] = xujian_id.toRequestBody()
return aiApi.getRecognizeResult(map)
}
diff --git a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
index b5b58d9..3b49732 100644
--- a/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/app/utils/LocaleConstant.kt
@@ -57,5 +57,5 @@
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
const val SERVER_BASE_URL = "http://111.198.10.15:22003"
const val AI_SERVER_CONFIG = "aiServerConfig"
- const val AI_BASE_URL = "http://192.168.206.248:5000"
+ const val AI_BASE_URL = "http://192.168.186.127:5000"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/utils/LocationManager.kt b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
new file mode 100644
index 0000000..99762ec
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/utils/LocationManager.kt
@@ -0,0 +1,41 @@
+package com.casic.br.app.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+class LocationManager constructor(context: Context) {
+
+ private val kTag = "LocationManager"
+ private val locationClient by lazy { AMapLocationClient(context) }
+
+ fun getCurrentLocation(isOnceLocation: Boolean, listener: OnGetLocationListener) {
+ val locationOption = AMapLocationClientOption()
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationOption.isOnceLocation = isOnceLocation
+ locationOption.isNeedAddress = true
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ Log.e(kTag, "errCode:${it.errorCode}, errInfo:${it.errorInfo}")
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ fun stopLocation() {
+ locationClient.stopLocation()
+ }
+
+ /**
+ * 经纬度定位回调
+ * */
+ interface OnGetLocationListener {
+ fun onAMapLocationGet(location: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index eb04120..3238eef 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -177,6 +177,7 @@
override fun onItemLongClick(view: View?, position: Int) {
selectedImages.removeAt(position)
+ imagePaths.removeAt(position)
recyclerViewImages.removeAt(position)
imageAdapter.notifyDataSetChanged()
}
diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
new file mode 100644
index 0000000..8574b52
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.br.app.view
+
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.databinding.ActivityCheckResultBinding
+import com.casic.br.app.vm.InspectionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.LoadState
+
+class CheckResultActivity : KotlinBaseActivity() {
+
+ private val kTag = "CheckResultActivity"
+ private val context = this
+ private lateinit var inspectionViewModel: InspectionViewModel
+ private lateinit var inspectionId: String
+
+ override fun initEvent() {
+ binding.confirmButton.setOnClickListener {
+ inspectionViewModel.stopInspection(
+ this, inspectionId, System.currentTimeMillis().timestampToCompleteDate()
+ )
+ }
+
+ binding.cancelButton.setOnClickListener { finish() }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ }
+
+ override fun initViewBinding(): ActivityCheckResultBinding {
+ return ActivityCheckResultBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+ inspectionViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> {}
+ LoadState.Success -> {
+ "结束巡检成功".show(this)
+ finish()
+ }
+
+ LoadState.Fail -> "结束巡检失败,请重试".show(this)
+ }
+ }
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
index 1b01993..971d3a9 100644
--- a/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/LoginActivity.kt
@@ -2,6 +2,7 @@
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.MapsInitializer
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityLoginBinding
import com.casic.br.app.utils.AuthenticationHelper
@@ -114,7 +115,9 @@
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
-
+ //先把定位隐私政策声明,后面会用到
+ MapsInitializer.updatePrivacyShow(this, true, true)
+ MapsInitializer.updatePrivacyAgree(this, true)
}
override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
index 7be114e..710fe14 100644
--- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt
@@ -24,17 +24,25 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
+import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.model.DictionaryModel
+import com.casic.br.app.utils.LocaleConstant
+import com.casic.br.app.utils.LocationManager
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.ImageFileViewModel
+import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.rotateImage
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.timestampToDate
+import com.pengxh.kt.lite.extensions.timestampToTime
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
import java.io.ByteArrayOutputStream
import java.io.IOException
@@ -64,16 +72,42 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
+ private val locationManager by lazy { LocationManager(this) }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
+ private lateinit var inspectionViewModel: InspectionViewModel
private lateinit var configViewModel: ConfigViewModel
private lateinit var imageFileViewModel: ImageFileViewModel
+ private var inspectionId = ""
private var isRecognizing = false
private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
+ inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
+ locationManager.getCurrentLocation(true, object : LocationManager.OnGetLocationListener {
+ override fun onAMapLocationGet(location: AMapLocation?) {
+ location?.apply {
+ val inspectionUser = SaveKeyValues.getValue(
+ LocaleConstant.ACCOUNT, ""
+ ) as String
+
+ val currentTimeMillis = System.currentTimeMillis()
+ val inspectionDate = currentTimeMillis.timestampToDate()
+ val startTime = currentTimeMillis.timestampToTime()
+ inspectionViewModel.startInspection(
+ context, inspectionUser, address, inspectionDate, startTime
+ )
+ }
+ }
+ })
+ inspectionViewModel.addResultModel.observe(this) {
+ if (it.code == 200) {
+ inspectionId = it.data
+ }
+ }
+
configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
configViewModel.getDictionaryByCode(context, "pitfallBigType")
configViewModel.dictionary.observe(this) {
@@ -192,9 +226,15 @@
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
val base64 = bitmap.rotateImage(90).encodeToBase64()
- imageFileViewModel.getRecognizeResult(
- context, base64, binding.titleView.getTitle()
- )
+ if (inspectionId.isNotBlank()) {
+// imageFileViewModel.getRecognizeResult(
+// context, base64, binding.titleView.getTitle(), inspectionId
+// )
+ } else {
+ runOnUiThread {
+ "巡检ID异常,请重新建立巡检任务".show(context)
+ }
+ }
}
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
@@ -221,7 +261,11 @@
override fun initEvent() {
binding.stopButton.setOnClickListener {
- navigatePageTo()
+ if (inspectionId.isBlank()) {
+ "巡检任务创建中,请稍后再结束任务".show(this)
+ return@setOnClickListener
+ }
+ navigatePageTo(inspectionId)
}
binding.tipsButton.setOnClickListener {
@@ -259,14 +303,15 @@
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(), ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- }
- })
+ private val selectSceneLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult(),
+ ActivityResultCallback {
+ if (it.resultCode == Activity.RESULT_OK) {
+ val data = it.data ?: return@ActivityResultCallback
+ val sceneName = data.getStringExtra("sceneName").toString()
+ binding.titleView.setTitle(sceneName)
+ }
+ })
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
@@ -274,4 +319,9 @@
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
+
+ override fun onDestroy() {
+ super.onDestroy()
+ locationManager.stopLocation()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
index dd2dedd..6508312 100644
--- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt
@@ -4,7 +4,7 @@
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.extensions.getResponseMessage
-import com.casic.br.app.model.AddHiddenTroubleModel
+import com.casic.br.app.model.AddHiddenTroubleResultModel
import com.casic.br.app.model.HiddenTroubleDetailModel
import com.casic.br.app.model.HiddenTroubleModel
import com.casic.br.app.retrofit.RetrofitServiceManager
@@ -18,7 +18,7 @@
class HiddenTroubleViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val addTroubleResult = MutableLiveData()
+ val addTroubleResult = MutableLiveData()
val troublesResult = MutableLiveData()
val troubleDetailResult = MutableLiveData()
@@ -41,8 +41,8 @@
when (response.getResponseCode()) {
200 -> {
loadState.value = LoadState.Success
- addTroubleResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
+ addTroubleResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
)
}
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index e6a5ed6..8821e65 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -21,27 +21,28 @@
val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getRecognizeResult(context: Context, base64: String, scene: String) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
+ fun getRecognizeResult(context: Context, base64: String, scene: String, xujian_id: String) =
+ launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.getRecognizeResult(base64, scene, xujian_id)
+ when (response.getResponseCode()) {
+ 200 -> {
+ loadState.value = LoadState.Success
+ recognizeResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ }
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
+ else -> {
+ val element = JsonParser.parseString(response)
+ val jsonObject = element.asJsonObject
+ jsonObject.get("result").asString.show(context)
+ loadState.value = LoadState.Fail
+ }
}
- }
- }, {
- loadState.value = LoadState.Fail
- })
+ }, {
+ loadState.value = LoadState.Fail
+ })
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
diff --git a/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
new file mode 100644
index 0000000..8be3433
--- /dev/null
+++ b/app/src/main/java/com/casic/br/app/vm/InspectionViewModel.kt
@@ -0,0 +1,60 @@
+package com.casic.br.app.vm
+
+import android.content.Context
+import androidx.lifecycle.MutableLiveData
+import com.casic.br.app.extensions.getResponseCode
+import com.casic.br.app.extensions.getResponseMessage
+import com.casic.br.app.model.AddInspectionResultModel
+import com.casic.br.app.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.base.BaseViewModel
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.LoadState
+
+/**
+ * 巡检VM
+ * */
+class InspectionViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val addResultModel = MutableLiveData()
+
+ fun startInspection(
+ context: Context,
+ inspectionUser: String,
+ inspectionAddress: String,
+ inspectionDate: String,
+ startTime: String
+ ) = launch({
+ val response = RetrofitServiceManager.addRecord(
+ inspectionUser, inspectionAddress, inspectionDate, startTime
+ )
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ addResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ fun stopInspection(context: Context, inspectionId: String, endTime: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.stopInspection(inspectionId, endTime)
+ val responseCode = response.getResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.getResponseMessage().show(context)
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.localizedMessage?.show(context)
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt
deleted file mode 100644
index 43e5881..0000000
--- a/app/src/main/java/com/casic/br/app/widgets/CheckResultDialog.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.br.app.widgets
-
-import android.app.Dialog
-import android.content.Context
-import android.os.Bundle
-import com.casic.br.app.databinding.DialogCheckResultBinding
-import com.pengxh.kt.lite.extensions.binding
-import com.pengxh.kt.lite.extensions.initDialogLayoutParams
-
-class CheckResultDialog constructor(context: Context) : Dialog(context) {
-
- private val binding: DialogCheckResultBinding by binding()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.initDialogLayoutParams(1f)
- setCanceledOnTouchOutside(false)
-
- binding.dialogConfirmButton.setOnClickListener {
- dismiss()
- }
-
- binding.dialogCancelButton.setOnClickListener { dismiss() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_check_result.xml b/app/src/main/res/layout/activity_check_result.xml
new file mode 100644
index 0000000..8b0dc1d
--- /dev/null
+++ b/app/src/main/res/layout/activity_check_result.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_check_result.xml b/app/src/main/res/layout/dialog_check_result.xml
deleted file mode 100644
index a353b47..0000000
--- a/app/src/main/res/layout/dialog_check_result.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-