diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + () { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/app/src/main/res/layout/popu_safety_tree_info.xml b/app/src/main/res/layout/popu_safety_tree_info.xml deleted file mode 100644 index 9b7a516..0000000 --- a/app/src/main/res/layout/popu_safety_tree_info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/app/src/main/res/layout/popu_safety_tree_info.xml b/app/src/main/res/layout/popu_safety_tree_info.xml deleted file mode 100644 index 9b7a516..0000000 --- a/app/src/main/res/layout/popu_safety_tree_info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popu_worker_info.xml b/app/src/main/res/layout/popu_worker_info.xml deleted file mode 100644 index af43207..0000000 --- a/app/src/main/res/layout/popu_worker_info.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/app/src/main/res/layout/popu_safety_tree_info.xml b/app/src/main/res/layout/popu_safety_tree_info.xml deleted file mode 100644 index 9b7a516..0000000 --- a/app/src/main/res/layout/popu_safety_tree_info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popu_worker_info.xml b/app/src/main/res/layout/popu_worker_info.xml deleted file mode 100644 index af43207..0000000 --- a/app/src/main/res/layout/popu_worker_info.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popup_safety_tree_info.xml b/app/src/main/res/layout/popup_safety_tree_info.xml new file mode 100644 index 0000000..22e4575 --- /dev/null +++ b/app/src/main/res/layout/popup_safety_tree_info.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/app/src/main/res/layout/popu_safety_tree_info.xml b/app/src/main/res/layout/popu_safety_tree_info.xml deleted file mode 100644 index 9b7a516..0000000 --- a/app/src/main/res/layout/popu_safety_tree_info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popu_worker_info.xml b/app/src/main/res/layout/popu_worker_info.xml deleted file mode 100644 index af43207..0000000 --- a/app/src/main/res/layout/popu_worker_info.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popup_safety_tree_info.xml b/app/src/main/res/layout/popup_safety_tree_info.xml new file mode 100644 index 0000000..22e4575 --- /dev/null +++ b/app/src/main/res/layout/popup_safety_tree_info.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_worker_info.xml b/app/src/main/res/layout/popup_worker_info.xml new file mode 100644 index 0000000..965290e --- /dev/null +++ b/app/src/main/res/layout/popup_worker_info.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/app/src/main/res/layout/popu_safety_tree_info.xml b/app/src/main/res/layout/popu_safety_tree_info.xml deleted file mode 100644 index 9b7a516..0000000 --- a/app/src/main/res/layout/popu_safety_tree_info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popu_worker_info.xml b/app/src/main/res/layout/popu_worker_info.xml deleted file mode 100644 index af43207..0000000 --- a/app/src/main/res/layout/popu_worker_info.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popup_safety_tree_info.xml b/app/src/main/res/layout/popup_safety_tree_info.xml new file mode 100644 index 0000000..22e4575 --- /dev/null +++ b/app/src/main/res/layout/popup_safety_tree_info.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_worker_info.xml b/app/src/main/res/layout/popup_worker_info.xml new file mode 100644 index 0000000..965290e --- /dev/null +++ b/app/src/main/res/layout/popup_worker_info.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/location_blue.png b/app/src/main/res/mipmap-xxhdpi/location_blue.png new file mode 100644 index 0000000..d260a37 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/location_blue.png Binary files differ diff --git a/.gitignore b/.gitignore index fdbf7ed..294a48a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ /captures .externalNativeBuild .cxx +*.apk +*.json +*.zip diff --git a/app/build.gradle b/app/build.gradle index 91515db..ea2c87d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ applicationId "com.casic.br.operationsite" minSdkVersion 23 targetSdkVersion 33 - versionCode 1001 - versionName "1.0.0.1" + versionCode 1010 + versionName "1.0.1.0" } buildTypes { diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index 23ab6cc..e1ea75f 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -8,7 +8,7 @@ /** * PublicKey校验 */ - @GET("/api/sys/config/baseConfig") + @GET("/sys/config/baseConfig") suspend fun authenticate(): String /** @@ -19,7 +19,7 @@ * @param secretKey 加密后的密码 */ @FormUrlEncoded - @POST("/api/sys/user/appLogin") + @POST("/sys/user/appLogin") suspend fun login( @Field("sid") sid: String, @Field("username") account: String, @@ -27,15 +27,21 @@ ): String /** + * 退出登录 + */ + @GET("/sys/user/logout") + suspend fun loginOut(@Header("token") token: String): String + + /** * 获取用户信息 */ - @GET("/api/sys/user/info") + @GET("/sys/user/info") suspend fun getUserDetail(@Header("token") token: String): String /** * 实施中列表 */ - @GET("/api/site/listPage") + @GET("/site/listPage") suspend fun getProjectListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -47,7 +53,7 @@ /** * 施工现场详情 */ - @GET("/api/site/detail") + @GET("/site/detail") suspend fun getProjectDetail( @Header("token") token: String, @Query("projectId") projectId: String @@ -56,7 +62,7 @@ /** * 获取工作区域 */ - @GET("/api/overview/deviceList") + @GET("/overview/deviceList") suspend fun getWorkSiteArea( @Header("token") token: String, @Query("projectId") projectId: String @@ -65,7 +71,7 @@ /** * 获取工作区域作业人员 */ - @GET("/api/overview/workerList") + @GET("/overview/workerList") suspend fun getWorkers( @Header("token") token: String, @Query("projectId") projectId: String @@ -74,7 +80,7 @@ /** * 设备分页列表 */ - @GET("/api/device/listPage") + @GET("/device/listPage") suspend fun getDeviceList( @Header("token") token: String, @Query("deviceCode") deviceCode: String, @@ -89,7 +95,7 @@ * 设置甲烷阈值 */ @FormUrlEncoded - @POST("/api/device/setThreshold") + @POST("/device/setThreshold") suspend fun setMethaneThreshold( @Header("token") token: String, @Field("gasIp") gasIp: String, @@ -100,7 +106,7 @@ /** * 查询甲烷阈值 */ - @GET("/api/device/getThreshold") + @GET("/device/getThreshold") suspend fun getMethaneThreshold( @Header("token") token: String, @Query("gasIp") gasIp: String, @@ -110,7 +116,7 @@ /** * 报警列表 */ - @GET("/api/alarm/listPage") + @GET("/alarm/listPage") suspend fun getAlarmListByPage( @Header("token") token: String, @Query("keywords") keywords: String, @@ -123,19 +129,19 @@ /** * 报警详情 */ - @GET("/api/alarm/detail") + @GET("/alarm/detail") suspend fun getAlarmDetail(@Header("token") token: String, @Query("id") id: String): String /** * 声光报警开关 */ - @POST("/api/changeAlarmState") + @POST("/changeAlarmState") suspend fun changeAlarmState(@Body requestBody: RequestBody): String /** * 声光报警开关状态 */ - @GET("/api/GetCurrentState") + @GET("/GetCurrentState") suspend fun getAlarmState(): String /** @@ -144,19 +150,19 @@ * http://xx.com/static/2019-10/8050891248624f2bbefedcb196ce89cb.jpeg */ @Multipart - @POST("/api/file/upload") + @POST("/file/upload") suspend fun uploadImage(@Header("token") token: String, @Part file: MultipartBody.Part): String /** * 新增事件 */ - @POST("/api/event/add") + @POST("/event/add") suspend fun addEvent(@Header("token") token: String, @Body requestBody: RequestBody): String /** * 人员申请入场 */ - @POST("/api/worker/add") + @POST("/worker/add") suspend fun enter( @Header("token") token: String, @Body requestBody: RequestBody, @@ -166,6 +172,6 @@ /** * 提交算法区域 */ - @POST("/api/set_position") + @POST("/set_position") suspend fun postRegion(@Body requestBody: RequestBody): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index a73789c..5abd3a4 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -41,6 +41,13 @@ } /** + * 退出登录 + */ + suspend fun loginOut(): String { + return api.loginOut(AuthenticationHelper.token!!) + } + + /** * 获取用户信息 */ suspend fun getUserDetail(): String { diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index cda5360..d59a030 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -42,7 +42,8 @@ ) } - const val SERVER_BASE_URL = "http://123.60.215.216:8065" +// const val SERVER_BASE_URL = "http://123.60.215.216:8065/api" + const val SERVER_BASE_URL = "http://111.198.10.15:22006" const val DEVICE_CONTROLLER_URL = "https://gbs.ntvgbs.cn/login/" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt index e029145..8af297b 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmDetailActivity.kt @@ -18,6 +18,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.vm.AlarmViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -47,6 +48,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) this.id = intent.getStringExtra(Constant.INTENT_PARAM)!! aMap = binding.mapView.map diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt index 5775599..dd9aa3d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt @@ -21,6 +21,7 @@ import com.pengxh.kt.lite.extensions.diffCurrentTime import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.WeakReferenceHandler @@ -53,6 +54,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] getAlarmListByPage() diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index 03aeb44..edee938 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -26,6 +26,7 @@ import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub @@ -62,6 +63,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index 99dcea1..dc0d996 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant class BigImageActivity : KotlinBaseActivity() { @@ -29,7 +30,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - + ActivityStackManager.addActivity(this) } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt index bb6fff7..5dd220e 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControllerActivity.kt @@ -12,6 +12,7 @@ import com.just.agentweb.AgentWeb import com.just.agentweb.WebViewClient import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.TitleBarView class DeviceControllerActivity : KotlinBaseActivity() { @@ -23,6 +24,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) agentWeb = AgentWeb.with(this).setAgentWebParent( binding.containerView, LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt index 16f98dc..3142bc9 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/FaceDetectActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.createImageFileDir import com.pengxh.kt.lite.extensions.setScreenBrightness import com.pengxh.kt.lite.extensions.toBitmap +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import java.io.File @@ -74,6 +75,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) //调节屏幕亮度最大 window.setScreenBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL) diff --git a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt index 6874040..641f3ed 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/LoginActivity.kt @@ -14,6 +14,7 @@ import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -33,6 +34,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) // 设置默认账号密码 binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.userPasswordView.setText( diff --git a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt index 676c7bf..0b51452 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MainActivity.kt @@ -14,6 +14,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.toJson +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.BroadcastManager class MainActivity : KotlinBaseActivity() { @@ -46,6 +47,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) binding.mainViewPager.adapter = ViewPagerAdapter(pageViews, supportFragmentManager) binding.mainViewPager.offscreenPageLimit = pageViews.size //缓存页数 diff --git a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt index 4e0e389..73953df 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/MethaneActivity.kt @@ -29,6 +29,7 @@ import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.SaveKeyValues import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.SteeringWheelView @@ -61,6 +62,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) weakReferenceHandler = WeakReferenceHandler(this) RuntimeCache.deviceModels.forEach { diff --git a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt index 67c9f78..bc37415 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/PermissionActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.operationsite.R import com.casic.br.operationsite.utils.LocaleConstant import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks @@ -13,6 +14,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + ActivityStackManager.addActivity(this) //判断是否有权限,如果版本大于5.1才需要判断(即6.0以上),其他则不需要判断。 if (EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { startSplashScreenActivity() diff --git a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt index e93863f..b078b76 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/SplashScreenActivity.kt @@ -8,6 +8,7 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager class SplashScreenActivity : KotlinBaseActivity() { @@ -24,6 +25,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) userDetailViewModel = ViewModelProvider(this)[UserDetailViewModel::class.java] } diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index debc81f..b87af71 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -36,6 +36,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues @@ -76,6 +77,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val userDetailJson = SaveKeyValues.getValue(LocaleConstant.USER_DETAIL_MODEL, "") as String if (userDetailJson.isNotBlank()) { val userDetail = Gson().fromJson( diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt index 45fe0a5..76ab644 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt @@ -24,6 +24,7 @@ import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.getSystemService import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.widget.dialog.BottomActionSheet class VideoBoundaryActivity : KotlinBaseActivity() { @@ -118,6 +119,7 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) val params = binding.fragmentContainer.layoutParams params.width = getScreenWidth() params.height = ((9 / 16f) * params.width).toInt() diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index 4c55855..5eccd98 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -21,31 +21,41 @@ import com.casic.br.operationsite.model.DeviceConfigModel import com.casic.br.operationsite.model.WorkSiteAreaModel import com.casic.br.operationsite.model.WorkerModel +import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.DeviceType import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.DeviceViewModel +import com.casic.br.operationsite.vm.LoginViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.widget.TitleBarView -import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog class WorkSiteTabActivity : KotlinBaseActivity(), - AMap.OnMarkerClickListener, AMap.InfoWindowAdapter { + AMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener { private val kTag = "WorkSiteTabActivity" + private val context = this private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var deviceViewModel: DeviceViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var projectId: String private val polygonOptions by lazy { PolygonOptions() } - private val latlngs: MutableList = ArrayList() + private val latLngArray: MutableList = ArrayList() private val workers: MutableList = ArrayList() private val safetyTrees: MutableList = ArrayList() + private var clickedMarker: Marker? = null + + /** + * 自定义Marker弹出框 + * */ + private var infoWindow: View? = null override fun initViewBinding(): ActivitySiteTabBinding { return ActivitySiteTabBinding.inflate(layoutInflater) @@ -59,12 +69,26 @@ } override fun onRightClick() { + AlertControlDialog.Builder() + .setContext(context) + .setTitle("退出登录") + .setMessage("确定要退出吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + loginViewModel.out() + } + override fun onCancelClick() {} + }).build().show() } }) } override fun initOnCreate(savedInstanceState: Bundle?) { + ActivityStackManager.addActivity(this) projectId = intent.getStringExtra(Constant.INTENT_PARAM)!! /** @@ -73,14 +97,16 @@ aMap = binding.mapView.map aMap.mapType = AMap.MAP_TYPE_NORMAL val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true + uiSettings.isCompassEnabled = false uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + uiSettings.isRotateGesturesEnabled = false//不允许地图随手势改变方位 // marker 点击事件监听 aMap.addOnMarkerClickListener(this) // 点击marker弹出自定义popup aMap.setInfoWindowAdapter(this) + //地图点击事件,用于隐藏infoWindow + aMap.setOnMapClickListener(this) /** * 数据初始化 @@ -133,29 +159,33 @@ workSiteViewModel.getWorkSiteArea(this, projectId) workSiteViewModel.workSiteAreaResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() - it.data.forEach { data -> - val lat = data.lat.toDouble() - val lng = data.lng.toDouble() + it.data.forEach { x -> + if (x.lat.isNotBlank() && x.lng.isNotBlank()) { + val latitude = x.lat.toDouble() + val longitude = x.lng.toDouble() - latitudeList.add(lat) - longitudeList.add(lng) + latitudeList.add(latitude) + longitudeList.add(longitude) - val latLng = LatLng(lat, lng) + val latLng = LatLng(latitude, longitude) - safetyTrees.add(data) - //安全树围起来的区域范围 - latlngs.add(latLng) + safetyTrees.add(x) + //安全树围起来的区域范围 + latLngArray.add(latLng) - //标记安全树 - aMap.addMarker( - MarkerOptions().position(latLng).title(data.deviceCode).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap - ) + //标记安全树 + allMarkerOptions.add( + MarkerOptions().position(LatLng(latitude, longitude)) + .title(x.deviceCode).icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_red).bitmap + ) + ) ) - ) + } } //计算所有点的中心点位置 val centerLatLng = LatLng(latitudeList.average(), longitudeList.average()) @@ -164,9 +194,13 @@ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) aMap.animateCamera(cameraUpdate) + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } + //绘制工作区域矩形 aMap.addPolygon( - polygonOptions.addAll(latlngs).strokeWidth(5f).strokeColor(Color.RED) + polygonOptions.addAll(latLngArray).strokeWidth(5f).strokeColor(Color.RED) .fillColor(Color.argb(50, 0, 0, 255)) ) } @@ -175,70 +209,116 @@ workSiteViewModel.getWorkers(this, projectId) workSiteViewModel.workerResult.observe(this) { if (it.code == 200) { + val allMarkerOptions = ArrayList() it.data.forEach { worker -> - workers.add(worker) - aMap.addMarker( - MarkerOptions().position( - LatLng( - worker.lat.toDouble(), worker.lng.toDouble() - ) - ).title(worker.workerId).icon( - BitmapDescriptorFactory.fromBitmap( - BitmapDescriptorFactory.fromResource(R.mipmap.well_location).bitmap - ) + if (worker.lat.isNotBlank() && worker.lng.isNotBlank()) { + val latitude = worker.lat.toDouble() + val longitude = worker.lng.toDouble() + + workers.add(worker) + allMarkerOptions.add( + MarkerOptions() + .position(LatLng(latitude, longitude)) + .title(worker.workerId) + .icon( + BitmapDescriptorFactory.fromBitmap( + BitmapDescriptorFactory.fromResource(R.mipmap.location_blue).bitmap + ) + ) ) - ) + } + + allMarkerOptions.forEach { marker -> + aMap.addMarker(marker) + } } } } + + loginViewModel = ViewModelProvider(this)[LoginViewModel::class.java] + loginViewModel.outResultModel.observe(this) { + if (it.code == 200) { + AuthenticationHelper.removeToken() + ActivityStackManager.finishAllActivity() + navigatePageTo() + } + } } override fun onMarkerClick(marker: Marker?): Boolean { - //显示闸井信息 - marker?.showInfoWindow() + marker?.apply { + infoWindow = if (this.options.title.toString().startsWith("AQS")) { + LayoutInflater.from(context).inflate(R.layout.popup_safety_tree_info, null) + } else { + LayoutInflater.from(context).inflate(R.layout.popup_worker_info, null) + } + + clickedMarker = this + if (isInfoWindowShown) { + hideInfoWindow() + } else { + showInfoWindow() + } + } return true } + override fun onMapClick(p0: LatLng?) { + clickedMarker?.apply { + if (isInfoWindowShown) { + hideInfoWindow() + } + } + } + override fun getInfoWindow(marker: Marker?): View? { - if (marker?.options?.title.toString().startsWith("AQS")) { - val v = LayoutInflater.from(this).inflate(R.layout.popu_safety_tree_info, null) - //反射得到popup里面的控件对象 - val deviceNameView = v.findViewById(R.id.deviceNameView) - val alarmValueView = v.findViewById(R.id.alarmValueView) - val timeView = v.findViewById(R.id.timeView) - - val deviceCode = marker?.options?.title - safetyTrees.forEach { - if (it.deviceCode == deviceCode) { - deviceNameView.text = "设备名称:安全树-${it.deviceCode}" - alarmValueView.text = "甲烷浓度:${it.gasValue}" - timeView.text = "报警时间:${it.time}" - } + marker?.apply { + if (this.options.title.toString().startsWith("AQS")) { + renderSafetyTreeWindow(this, infoWindow!!) + } else { + renderWorkerWindow(this, infoWindow!!) } - return v - } else { - val v = LayoutInflater.from(this).inflate(R.layout.popu_worker_info, null) - //反射得到popup里面的控件对象 - val workerNameView = v.findViewById(R.id.workerNameView) - val heartRateView = v.findViewById(R.id.heartRateView) - val bloodOxygenView = v.findViewById(R.id.bloodOxygenView) - val timeView = v.findViewById(R.id.timeView) + } + return infoWindow + } - val workerId = marker?.options?.title - workers.forEach { - if (it.workerId == workerId) { - val workerName = if (it.workerName.isNullOrBlank()) { - "张三" - } else { - it.workerName - } - workerNameView.text = "名称:$workerName" - heartRateView.text = "心率:${it.heartRate}次/min" - bloodOxygenView.text = "血氧浓度:${it.bloodOxygen}%" - timeView.text = "时间:${it.time}" - } + private fun renderSafetyTreeWindow(marker: Marker, view: View) { + val deviceNameView = view.findViewById(R.id.deviceNameView) + val alarmValueView = view.findViewById(R.id.alarmValueView) + val timeView = view.findViewById(R.id.timeView) + + val deviceCode = marker.options.title + safetyTrees.forEach { + if (it.deviceCode == deviceCode) { + deviceNameView.text = "设备名称:安全树-${it.deviceCode}" + alarmValueView.text = "甲烷浓度:${it.gasValue}" + timeView.text = "报警时间:${it.time}" } - return v + } + } + + private fun renderWorkerWindow(marker: Marker, view: View) { + val workerNameView = view.findViewById(R.id.workerNameView) + val heartRateView = view.findViewById(R.id.heartRateView) + val bloodOxygenView = view.findViewById(R.id.bloodOxygenView) + val coValueView = view.findViewById(R.id.coValueView) + val gasValueView = view.findViewById(R.id.gasValueView) + val h2sValueView = view.findViewById(R.id.h2sValueView) + val o2ValueView = view.findViewById(R.id.o2ValueView) + val timeView = view.findViewById(R.id.timeView) + + val workerId = marker.options.title + workers.forEach { + if (it.workerId == workerId) { + workerNameView.text = "名称:${it.workerName}" + heartRateView.text = "心率:${it.heartRate}BPM" + bloodOxygenView.text = "血氧:${it.bloodOxygen}%" + coValueView.text = "一氧化碳:${it.co}%VOL" + gasValueView.text = "甲烷:${it.gas}%VOL" + h2sValueView.text = "硫化氢:${it.co}PPM" + o2ValueView.text = "氧气:${it.o2}%VOL" + timeView.text = "时间:${it.time}" + } } } @@ -251,6 +331,7 @@ workSiteViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...") + else -> LoadingDialogHub.dismiss() } } @@ -262,17 +343,7 @@ } binding.fenceTextView.setOnClickListener { - BottomActionSheet.Builder().setContext(this) - .setActionItemTitle(arrayListOf("监控区域", "云台控制")) - .setItemTextColor(R.color.mainThemeColor.convertColor(this)) - .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { - override fun onActionItemClick(position: Int) { - when (position) { - 0 -> navigatePageTo() - 1 -> navigatePageTo() - } - } - }).build().show() + navigatePageTo() } binding.uploadTextView.setOnClickListener { @@ -282,6 +353,14 @@ binding.applyTextView.setOnClickListener { navigatePageTo(projectId) } + + binding.reloadDataView.setOnClickListener { + aMap.clear() + + workSiteViewModel.getWorkers(this, projectId) + + workSiteViewModel.getWorkSiteArea(this, projectId) + } } /**地图相关*********/ diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt index 9b6f9df..79e07af 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.CommonResultModel import com.casic.br.operationsite.model.LoginResultModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -17,6 +18,7 @@ private val gson = Gson() val enterResultModel = MutableLiveData() + val outResultModel = MutableLiveData() fun enter(context: Context, sid: String, account: String, secretKey: String) = launch({ loadState.value = LoadState.Loading @@ -38,4 +40,16 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun out() = launch({ + val response = RetrofitServiceManager.loginOut() + val responseCode = response.getResponseCode() + if (responseCode == 200) { + outResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt index 39d50d8..47d29c9 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/WorkSiteViewModel.kt @@ -69,23 +69,19 @@ }) fun getWorkSiteArea(context: Context, projectId: String) = launch({ - loadState.value = LoadState.Loading val response = RetrofitServiceManager.getWorkSiteArea(projectId) when (response.getResponseCode()) { 200 -> { workSiteAreaResult.value = gson.fromJson( response, object : TypeToken() {}.type ) - loadState.value = LoadState.Success } else -> { - loadState.value = LoadState.Fail response.getResponseMessage().show(context) } } }, { - loadState.value = LoadState.Fail it.printStackTrace() }) diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..79a2ef6 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..938eac0 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index d1b932a..9c08857 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -13,8 +13,9 @@ android:background="@color/mainThemeColor" app:tbv_left_image="@drawable/ic_title_left" app:tbv_only_show_title="false" + app:tbv_right_image="@drawable/ic_exit" app:tbv_show_left_image="true" - app:tbv_show_right_image="false" + app:tbv_show_right_image="true" app:tbv_text="燃气作业现场动态感知" app:tbv_text_color="@color/white" app:tbv_text_size="@dimen/sp_18" /> @@ -97,13 +98,27 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + diff --git a/app/src/main/res/layout/popu_safety_tree_info.xml b/app/src/main/res/layout/popu_safety_tree_info.xml deleted file mode 100644 index 9b7a516..0000000 --- a/app/src/main/res/layout/popu_safety_tree_info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popu_worker_info.xml b/app/src/main/res/layout/popu_worker_info.xml deleted file mode 100644 index af43207..0000000 --- a/app/src/main/res/layout/popu_worker_info.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/popup_safety_tree_info.xml b/app/src/main/res/layout/popup_safety_tree_info.xml new file mode 100644 index 0000000..22e4575 --- /dev/null +++ b/app/src/main/res/layout/popup_safety_tree_info.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_worker_info.xml b/app/src/main/res/layout/popup_worker_info.xml new file mode 100644 index 0000000..965290e --- /dev/null +++ b/app/src/main/res/layout/popup_worker_info.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/location_blue.png b/app/src/main/res/mipmap-xxhdpi/location_blue.png new file mode 100644 index 0000000..d260a37 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/location_blue.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/location_red.png b/app/src/main/res/mipmap-xxhdpi/location_red.png new file mode 100644 index 0000000..fdb1ff1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/location_red.png Binary files differ