diff --git a/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java new file mode 100644 index 0000000..eb2bfa3 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java @@ -0,0 +1,118 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class TubeGasHistoryModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceCode; + private String deviceId; + private String gasValue; + private String groupCode; + private String id; + private String projectId; + private String projectName; + private String ts; + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getGasValue() { + return gasValue; + } + + public void setGasValue(String gasValue) { + this.gasValue = gasValue; + } + + public String getGroupCode() { + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} diff --git a/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java new file mode 100644 index 0000000..eb2bfa3 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java @@ -0,0 +1,118 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class TubeGasHistoryModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceCode; + private String deviceId; + private String gasValue; + private String groupCode; + private String id; + private String projectId; + private String projectName; + private String ts; + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getGasValue() { + return gasValue; + } + + public void setGasValue(String gasValue) { + this.gasValue = gasValue; + } + + public String getGroupCode() { + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} 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 d855ac6..edc5bdf 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 @@ -87,6 +87,18 @@ ): String /** + * 获取此时往前推2h的管盯数据 + */ + @GET("/v3/data/tubeGasList") + suspend fun getTubeGasHistory( + @Header("token") token: String, + @Query("deviceCode") deviceCode: String, + @Query("projectId") projectId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String + + /** * 报警列表 */ @GET("/alarm/listPage") diff --git a/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java new file mode 100644 index 0000000..eb2bfa3 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java @@ -0,0 +1,118 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class TubeGasHistoryModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceCode; + private String deviceId; + private String gasValue; + private String groupCode; + private String id; + private String projectId; + private String projectName; + private String ts; + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getGasValue() { + return gasValue; + } + + public void setGasValue(String gasValue) { + this.gasValue = gasValue; + } + + public String getGroupCode() { + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} 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 d855ac6..edc5bdf 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 @@ -87,6 +87,18 @@ ): String /** + * 获取此时往前推2h的管盯数据 + */ + @GET("/v3/data/tubeGasList") + suspend fun getTubeGasHistory( + @Header("token") token: String, + @Query("deviceCode") deviceCode: String, + @Query("projectId") projectId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String + + /** * 报警列表 */ @GET("/alarm/listPage") 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 c15f888..1e2a78c 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 @@ -5,6 +5,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.JsonObject +import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType @@ -85,6 +86,22 @@ } /** + * 获取此时往前推2h的管盯数据 + */ + suspend fun getTubeGasHistory(deviceCode: String, projectId: String): String { + val current = System.currentTimeMillis() + val startTime = current - 2 * 60 * 60 * 1000 + val endTime = current + return api.getTubeGasHistory( + AuthenticationHelper.token!!, + deviceCode, + projectId, + startTime.timestampToCompleteDate(), + endTime.timestampToCompleteDate() + ) + } + + /** * 报警列表 */ suspend fun getAlarmListByPage(keywords: String, page: Int): String { diff --git a/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java new file mode 100644 index 0000000..eb2bfa3 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java @@ -0,0 +1,118 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class TubeGasHistoryModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceCode; + private String deviceId; + private String gasValue; + private String groupCode; + private String id; + private String projectId; + private String projectName; + private String ts; + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getGasValue() { + return gasValue; + } + + public void setGasValue(String gasValue) { + this.gasValue = gasValue; + } + + public String getGroupCode() { + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} 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 d855ac6..edc5bdf 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 @@ -87,6 +87,18 @@ ): String /** + * 获取此时往前推2h的管盯数据 + */ + @GET("/v3/data/tubeGasList") + suspend fun getTubeGasHistory( + @Header("token") token: String, + @Query("deviceCode") deviceCode: String, + @Query("projectId") projectId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String + + /** * 报警列表 */ @GET("/alarm/listPage") 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 c15f888..1e2a78c 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 @@ -5,6 +5,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.JsonObject +import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType @@ -85,6 +86,22 @@ } /** + * 获取此时往前推2h的管盯数据 + */ + suspend fun getTubeGasHistory(deviceCode: String, projectId: String): String { + val current = System.currentTimeMillis() + val startTime = current - 2 * 60 * 60 * 1000 + val endTime = current + return api.getTubeGasHistory( + AuthenticationHelper.token!!, + deviceCode, + projectId, + startTime.timestampToCompleteDate(), + endTime.timestampToCompleteDate() + ) + } + + /** * 报警列表 */ suspend fun getAlarmListByPage(keywords: String, page: Int): String { 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 3de288e..5620067 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 @@ -18,16 +18,25 @@ import com.amap.api.maps.model.PolygonOptions import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivitySiteTabBinding +import com.casic.br.operationsite.extensions.initConfig import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.WorkSiteDeviceModel import com.casic.br.operationsite.model.WorkSiteWorkerModel import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.LoginViewModel +import com.casic.br.operationsite.vm.TubeViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel +import com.casic.br.operationsite.widgets.LineChartMarkerView +import com.github.mikephil.charting.data.Entry +import com.github.mikephil.charting.data.LineData +import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.google.android.material.bottomsheet.BottomSheetBehavior 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.extensions.timestampToTime import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog @@ -46,6 +55,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var loginViewModel: LoginViewModel + private lateinit var tubeViewModel: TubeViewModel private lateinit var bottomSheetBehavior: BottomSheetBehavior<*> private var clickedMarker: Marker? = null private var isReloadData = false @@ -230,6 +240,8 @@ } } + tubeViewModel = ViewModelProvider(this)[TubeViewModel::class.java] + // 初始化 BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(binding.cardView) bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN @@ -271,7 +283,43 @@ binding.installerView.text = "安装人员:${deviceData.workerName}" binding.installedTimeView.text = "录入时间:${deviceData.registerTime}" + //初始化趋势图 + binding.lineChart.initConfig() + + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + val lineDataSets = ArrayList() + val dataSet = LineDataSet(strengthEntries, "") + //获取实时浓度曲线 + tubeViewModel.getTubeGasHistory( + context, deviceData.deviceCode, RuntimeCache.projectId + ) + tubeViewModel.tubeGasHistoryLiveData.observe(this@WorkSiteTabActivity) { + if (it.code == 200) { + it.data.forEachIndexed { index, x -> + xAxisLabels.add(System.currentTimeMillis().timestampToTime()) + //浓度线 + strengthEntries.add( + Entry(index.toFloat(), x.gasValue.toFloat(), "浓度") + ) + } + //设置数据 + dataSet.values = strengthEntries + lineDataSets.add(dataSet) + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + + dataSet.color = R.color.mainThemeColor.convertColor(context) + val markerView = LineChartMarkerView(context) + markerView.chartView = binding.lineChart + markerView.setXAxisDate(xAxisLabels) + binding.lineChart.marker = markerView + + binding.lineChart.data = lineData + binding.lineChart.invalidate() + } + } } else { infoWindow = inflater.inflate(R.layout.popup_worker_info, null) clickedMarker = this diff --git a/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java new file mode 100644 index 0000000..eb2bfa3 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java @@ -0,0 +1,118 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class TubeGasHistoryModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceCode; + private String deviceId; + private String gasValue; + private String groupCode; + private String id; + private String projectId; + private String projectName; + private String ts; + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getGasValue() { + return gasValue; + } + + public void setGasValue(String gasValue) { + this.gasValue = gasValue; + } + + public String getGroupCode() { + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} 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 d855ac6..edc5bdf 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 @@ -87,6 +87,18 @@ ): String /** + * 获取此时往前推2h的管盯数据 + */ + @GET("/v3/data/tubeGasList") + suspend fun getTubeGasHistory( + @Header("token") token: String, + @Query("deviceCode") deviceCode: String, + @Query("projectId") projectId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String + + /** * 报警列表 */ @GET("/alarm/listPage") 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 c15f888..1e2a78c 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 @@ -5,6 +5,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.JsonObject +import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType @@ -85,6 +86,22 @@ } /** + * 获取此时往前推2h的管盯数据 + */ + suspend fun getTubeGasHistory(deviceCode: String, projectId: String): String { + val current = System.currentTimeMillis() + val startTime = current - 2 * 60 * 60 * 1000 + val endTime = current + return api.getTubeGasHistory( + AuthenticationHelper.token!!, + deviceCode, + projectId, + startTime.timestampToCompleteDate(), + endTime.timestampToCompleteDate() + ) + } + + /** * 报警列表 */ suspend fun getAlarmListByPage(keywords: String, page: Int): String { 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 3de288e..5620067 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 @@ -18,16 +18,25 @@ import com.amap.api.maps.model.PolygonOptions import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivitySiteTabBinding +import com.casic.br.operationsite.extensions.initConfig import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.WorkSiteDeviceModel import com.casic.br.operationsite.model.WorkSiteWorkerModel import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.LoginViewModel +import com.casic.br.operationsite.vm.TubeViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel +import com.casic.br.operationsite.widgets.LineChartMarkerView +import com.github.mikephil.charting.data.Entry +import com.github.mikephil.charting.data.LineData +import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.google.android.material.bottomsheet.BottomSheetBehavior 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.extensions.timestampToTime import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog @@ -46,6 +55,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var loginViewModel: LoginViewModel + private lateinit var tubeViewModel: TubeViewModel private lateinit var bottomSheetBehavior: BottomSheetBehavior<*> private var clickedMarker: Marker? = null private var isReloadData = false @@ -230,6 +240,8 @@ } } + tubeViewModel = ViewModelProvider(this)[TubeViewModel::class.java] + // 初始化 BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(binding.cardView) bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN @@ -271,7 +283,43 @@ binding.installerView.text = "安装人员:${deviceData.workerName}" binding.installedTimeView.text = "录入时间:${deviceData.registerTime}" + //初始化趋势图 + binding.lineChart.initConfig() + + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + val lineDataSets = ArrayList() + val dataSet = LineDataSet(strengthEntries, "") + //获取实时浓度曲线 + tubeViewModel.getTubeGasHistory( + context, deviceData.deviceCode, RuntimeCache.projectId + ) + tubeViewModel.tubeGasHistoryLiveData.observe(this@WorkSiteTabActivity) { + if (it.code == 200) { + it.data.forEachIndexed { index, x -> + xAxisLabels.add(System.currentTimeMillis().timestampToTime()) + //浓度线 + strengthEntries.add( + Entry(index.toFloat(), x.gasValue.toFloat(), "浓度") + ) + } + //设置数据 + dataSet.values = strengthEntries + lineDataSets.add(dataSet) + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + + dataSet.color = R.color.mainThemeColor.convertColor(context) + val markerView = LineChartMarkerView(context) + markerView.chartView = binding.lineChart + markerView.setXAxisDate(xAxisLabels) + binding.lineChart.marker = markerView + + binding.lineChart.data = lineData + binding.lineChart.invalidate() + } + } } else { infoWindow = inflater.inflate(R.layout.popup_worker_info, null) clickedMarker = this diff --git a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt index 3849d2e..b1eb147 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt @@ -1,15 +1,23 @@ package com.casic.br.operationsite.vm import android.content.Context +import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.TubeGasHistoryModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.LoadState class TubeViewModel : BaseViewModel() { + + private val gson = Gson() + val tubeGasHistoryLiveData = MutableLiveData() + fun install( context: Context, latGPS: String, @@ -37,4 +45,21 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getTubeGasHistory(context: Context, deviceCode: String, projectId: String) = launch({ + val response = RetrofitServiceManager.getTubeGasHistory(deviceCode, projectId) + when (response.getResponseCode()) { + 200 -> { + tubeGasHistoryLiveData.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + + else -> { + response.getResponseMessage().show(context) + } + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java new file mode 100644 index 0000000..eb2bfa3 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/TubeGasHistoryModel.java @@ -0,0 +1,118 @@ +package com.casic.br.operationsite.model; + +import java.util.List; + +public class TubeGasHistoryModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceCode; + private String deviceId; + private String gasValue; + private String groupCode; + private String id; + private String projectId; + private String projectName; + private String ts; + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getGasValue() { + return gasValue; + } + + public void setGasValue(String gasValue) { + this.gasValue = gasValue; + } + + public String getGroupCode() { + return groupCode; + } + + public void setGroupCode(String groupCode) { + this.groupCode = groupCode; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + } +} 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 d855ac6..edc5bdf 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 @@ -87,6 +87,18 @@ ): String /** + * 获取此时往前推2h的管盯数据 + */ + @GET("/v3/data/tubeGasList") + suspend fun getTubeGasHistory( + @Header("token") token: String, + @Query("deviceCode") deviceCode: String, + @Query("projectId") projectId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String + + /** * 报警列表 */ @GET("/alarm/listPage") 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 c15f888..1e2a78c 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 @@ -5,6 +5,7 @@ import com.casic.br.operationsite.utils.LocaleConstant import com.google.gson.Gson import com.google.gson.JsonObject +import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.utils.RetrofitFactory import com.pengxh.kt.lite.utils.SaveKeyValues import okhttp3.MediaType.Companion.toMediaType @@ -85,6 +86,22 @@ } /** + * 获取此时往前推2h的管盯数据 + */ + suspend fun getTubeGasHistory(deviceCode: String, projectId: String): String { + val current = System.currentTimeMillis() + val startTime = current - 2 * 60 * 60 * 1000 + val endTime = current + return api.getTubeGasHistory( + AuthenticationHelper.token!!, + deviceCode, + projectId, + startTime.timestampToCompleteDate(), + endTime.timestampToCompleteDate() + ) + } + + /** * 报警列表 */ suspend fun getAlarmListByPage(keywords: String, page: Int): String { 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 3de288e..5620067 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 @@ -18,16 +18,25 @@ import com.amap.api.maps.model.PolygonOptions import com.casic.br.operationsite.R import com.casic.br.operationsite.databinding.ActivitySiteTabBinding +import com.casic.br.operationsite.extensions.initConfig import com.casic.br.operationsite.extensions.initImmersionBar import com.casic.br.operationsite.model.WorkSiteDeviceModel import com.casic.br.operationsite.model.WorkSiteWorkerModel import com.casic.br.operationsite.utils.AuthenticationHelper import com.casic.br.operationsite.utils.RuntimeCache import com.casic.br.operationsite.vm.LoginViewModel +import com.casic.br.operationsite.vm.TubeViewModel import com.casic.br.operationsite.vm.WorkSiteViewModel +import com.casic.br.operationsite.widgets.LineChartMarkerView +import com.github.mikephil.charting.data.Entry +import com.github.mikephil.charting.data.LineData +import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.google.android.material.bottomsheet.BottomSheetBehavior 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.extensions.timestampToTime import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog @@ -46,6 +55,7 @@ private lateinit var aMap: AMap private lateinit var workSiteViewModel: WorkSiteViewModel private lateinit var loginViewModel: LoginViewModel + private lateinit var tubeViewModel: TubeViewModel private lateinit var bottomSheetBehavior: BottomSheetBehavior<*> private var clickedMarker: Marker? = null private var isReloadData = false @@ -230,6 +240,8 @@ } } + tubeViewModel = ViewModelProvider(this)[TubeViewModel::class.java] + // 初始化 BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(binding.cardView) bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN @@ -271,7 +283,43 @@ binding.installerView.text = "安装人员:${deviceData.workerName}" binding.installedTimeView.text = "录入时间:${deviceData.registerTime}" + //初始化趋势图 + binding.lineChart.initConfig() + + val xAxisLabels = ArrayList() + val strengthEntries = ArrayList() + val lineDataSets = ArrayList() + val dataSet = LineDataSet(strengthEntries, "") + //获取实时浓度曲线 + tubeViewModel.getTubeGasHistory( + context, deviceData.deviceCode, RuntimeCache.projectId + ) + tubeViewModel.tubeGasHistoryLiveData.observe(this@WorkSiteTabActivity) { + if (it.code == 200) { + it.data.forEachIndexed { index, x -> + xAxisLabels.add(System.currentTimeMillis().timestampToTime()) + //浓度线 + strengthEntries.add( + Entry(index.toFloat(), x.gasValue.toFloat(), "浓度") + ) + } + //设置数据 + dataSet.values = strengthEntries + lineDataSets.add(dataSet) + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + + dataSet.color = R.color.mainThemeColor.convertColor(context) + val markerView = LineChartMarkerView(context) + markerView.chartView = binding.lineChart + markerView.setXAxisDate(xAxisLabels) + binding.lineChart.marker = markerView + + binding.lineChart.data = lineData + binding.lineChart.invalidate() + } + } } else { infoWindow = inflater.inflate(R.layout.popup_worker_info, null) clickedMarker = this diff --git a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt index 3849d2e..b1eb147 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt @@ -1,15 +1,23 @@ package com.casic.br.operationsite.vm import android.content.Context +import androidx.lifecycle.MutableLiveData import com.casic.br.operationsite.extensions.getResponseCode import com.casic.br.operationsite.extensions.getResponseMessage +import com.casic.br.operationsite.model.TubeGasHistoryModel import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.LoadState class TubeViewModel : BaseViewModel() { + + private val gson = Gson() + val tubeGasHistoryLiveData = MutableLiveData() + fun install( context: Context, latGPS: String, @@ -37,4 +45,21 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getTubeGasHistory(context: Context, deviceCode: String, projectId: String) = launch({ + val response = RetrofitServiceManager.getTubeGasHistory(deviceCode, projectId) + when (response.getResponseCode()) { + 200 -> { + tubeGasHistoryLiveData.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } + + else -> { + response.getResponseMessage().show(context) + } + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_site_tab.xml b/app/src/main/res/layout/activity_site_tab.xml index 10d76c2..16628ba 100644 --- a/app/src/main/res/layout/activity_site_tab.xml +++ b/app/src/main/res/layout/activity_site_tab.xml @@ -107,7 +107,7 @@ android:layout_height="match_parent" android:backgroundTint="@color/mainBackColor" app:behavior_fitToContents="false" - app:behavior_halfExpandedRatio="0.725" + app:behavior_halfExpandedRatio="0.75" app:behavior_hideable="true" app:behavior_peekHeight="@dimen/dp_50" app:cardCornerRadius="@dimen/dp_10" @@ -127,7 +127,7 @@