diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt new file mode 100644 index 0000000..69adbb6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt @@ -0,0 +1,54 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.LoginResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class LoginViewModel : BaseViewModel() { + + private val kTag = "LoginViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + + fun inn(sid: String, account: String, secretKey: String) = launch({ + val response = RetrofitServiceManager.login(sid, account, secretKey) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun out() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.loginOut() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt new file mode 100644 index 0000000..69adbb6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt @@ -0,0 +1,54 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.LoginResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class LoginViewModel : BaseViewModel() { + + private val kTag = "LoginViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + + fun inn(sid: String, account: String, secretKey: String) = launch({ + val response = RetrofitServiceManager.login(sid, account, secretKey) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun out() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.loginOut() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 8e40ee1..d2da377 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -43,6 +43,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt new file mode 100644 index 0000000..69adbb6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt @@ -0,0 +1,54 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.LoginResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class LoginViewModel : BaseViewModel() { + + private val kTag = "LoginViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + + fun inn(sid: String, account: String, secretKey: String) = launch({ + val response = RetrofitServiceManager.login(sid, account, secretKey) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun out() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.loginOut() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 8e40ee1..d2da377 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -43,6 +43,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) diff --git a/app/src/main/res/layout/activity_alarm_search_result.xml b/app/src/main/res/layout/activity_alarm_search_result.xml index c6512d5..9da12e5 100644 --- a/app/src/main/res/layout/activity_alarm_search_result.xml +++ b/app/src/main/res/layout/activity_alarm_search_result.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/mainBackColor" android:orientation="vertical" - tools:context=".view.SearchResultActivity"> + tools:context=".view.AlarmSearchResultActivity"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt new file mode 100644 index 0000000..69adbb6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt @@ -0,0 +1,54 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.LoginResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class LoginViewModel : BaseViewModel() { + + private val kTag = "LoginViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + + fun inn(sid: String, account: String, secretKey: String) = launch({ + val response = RetrofitServiceManager.login(sid, account, secretKey) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun out() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.loginOut() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 8e40ee1..d2da377 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -43,6 +43,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) diff --git a/app/src/main/res/layout/activity_alarm_search_result.xml b/app/src/main/res/layout/activity_alarm_search_result.xml index c6512d5..9da12e5 100644 --- a/app/src/main/res/layout/activity_alarm_search_result.xml +++ b/app/src/main/res/layout/activity_alarm_search_result.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/mainBackColor" android:orientation="vertical" - tools:context=".view.SearchResultActivity"> + tools:context=".view.AlarmSearchResultActivity"> diff --git a/app/src/main/res/layout/activity_device_search_result.xml b/app/src/main/res/layout/activity_device_search_result.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_search_result.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt new file mode 100644 index 0000000..69adbb6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt @@ -0,0 +1,54 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.LoginResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class LoginViewModel : BaseViewModel() { + + private val kTag = "LoginViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + + fun inn(sid: String, account: String, secretKey: String) = launch({ + val response = RetrofitServiceManager.login(sid, account, secretKey) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun out() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.loginOut() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 8e40ee1..d2da377 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -43,6 +43,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) diff --git a/app/src/main/res/layout/activity_alarm_search_result.xml b/app/src/main/res/layout/activity_alarm_search_result.xml index c6512d5..9da12e5 100644 --- a/app/src/main/res/layout/activity_alarm_search_result.xml +++ b/app/src/main/res/layout/activity_alarm_search_result.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/mainBackColor" android:orientation="vertical" - tools:context=".view.SearchResultActivity"> + tools:context=".view.AlarmSearchResultActivity"> diff --git a/app/src/main/res/layout/activity_device_search_result.xml b/app/src/main/res/layout/activity_device_search_result.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_search_result.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_record.xml b/app/src/main/res/layout/activity_search_record.xml index 32c2b53..7ab2795 100644 --- a/app/src/main/res/layout/activity_search_record.xml +++ b/app/src/main/res/layout/activity_search_record.xml @@ -1,13 +1,160 @@ + android:background="@color/mainBackColor" + android:orientation="vertical" + tools:context=".view.SearchRecordActivity"> - + android:layout_height="0dp" + android:layout_weight="1"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c249a9..f11ea34 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,9 +46,10 @@ - + + diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index 428051e..d2ac7cf 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index 4aa46bb..e67f075 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.HorizontalBarChart import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.animateY(1200, Easing.EaseInOutQuad) this.setDrawGridBackground(false) this.setDrawBorders(false) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 87c1c61..25f238f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -1,13 +1,20 @@ package com.casic.qd.smartwell.extensions import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.components.Legend import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.components.YAxis +import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setDrawGridBackground(false) this.setDrawBorders(false) this.animateY(1200, Easing.EaseInOutQuad) diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index a88e096..3497dc7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -2,11 +2,18 @@ import android.graphics.Color import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseApplication import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend +import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { + this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataTextColor(R.color.orangeTextColor) + this.getPaint(Chart.PAINT_INFO).textSize = + SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() this.setUsePercentValues(false) //百分比数字显示 this.description.isEnabled = false this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1] diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt new file mode 100644 index 0000000..04d2a8a --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceTypeModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class DeviceTypeModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var deviceType: String? = null + var name: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt new file mode 100644 index 0000000..7ced62c --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/OwnerShipModel.kt @@ -0,0 +1,23 @@ +package com.casic.qd.smartwell.model + +class OwnerShipModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + var isChecked = false + var code: String? = null + var id: String? = null + var name: String? = null + var isOpen = false + var pcodes: String? = null + var pid: String? = null + var value: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index 5a509d2..cb85f80 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -31,6 +31,7 @@ const val ACCOUNT = "account" const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" + const val USER_DEVICE_TYPE = "userDeviceType" const val CANCEL_ALARM_ACTION = "cancelAlarm" const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 019d741..9496bf4 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -163,4 +163,28 @@ */ @GET("/statics/deviceStaticsByType") suspend fun deviceCountByType(@Header("token") token: String): String + + /** + * 根据部门获取支持的设备类型 + */ + /** + * 管网资产统计 + */ + @GET("/config/getAuthorByDept") + suspend fun obtainAuthorByDept(@Header("token") token: String): String + + /** + * 获取设备类型 + */ + @GET("/device/type") + suspend fun obtainDeviceType(@Header("token") token: String): String + + /** + * 获取权属单位 + */ + @GET("/dept/tree") + suspend fun obtainOwnerShip( + @Header("token") token: String, + @Query("deptType") deptType: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 3985af9..575b2a9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -160,4 +160,25 @@ suspend fun deviceCountByType(): String { return api.deviceCountByType(AuthenticationHelper.token!!) } + + /** + * 根据部门获取支持的设备类型 + */ + suspend fun obtainAuthorByDept(): String { + return api.obtainAuthorByDept(AuthenticationHelper.token!!) + } + + /** + * 获取设备类型 + */ + suspend fun obtainDeviceType(): String { + return api.obtainDeviceType(AuthenticationHelper.token!!) + } + + /** + * 获取权属单位 + */ + suspend fun obtainOwnerShip(deptType: String): String { + return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt index 2a6d344..abaffb2 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmManagementActivity.kt @@ -20,8 +20,7 @@ import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.CancelAlarmViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_management.* import kotlinx.android.synthetic.main.include_empty_view.* @@ -30,8 +29,7 @@ class AlarmManagementActivity : BaseActivity() { - private lateinit var alarmListViewModel: AlarmListViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var alarmListAdapter: AlarmListAdapter private var dataBeans: MutableList = ArrayList() @@ -46,8 +44,7 @@ } override fun initData() { - alarmListViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -63,7 +60,7 @@ override fun initEvent() { obtainAlarmList(pageIndex) - alarmListViewModel.listModel.observe(this, { + alarmViewModel.listModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -101,7 +98,7 @@ obtainAlarmList(pageIndex) } - cancelAlarmViewModel.loadState.observe(this, { + alarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { DialogHelper.showLoadingDialog(this, "处理中,请稍后") @@ -125,7 +122,7 @@ } private fun obtainAlarmList(pageIndex: Int) { - alarmListViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) + alarmViewModel.obtainAlarmList("", "", "", "", "", "", "1", pageIndex) } private class WeakReferenceHandler(activity: AlarmManagementActivity) : @@ -175,9 +172,7 @@ "操作失败,告警ID异常".show() return } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) + activity.alarmViewModel.obtainOperationResult(alarmId!!) } override fun onCancelClick() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt new file mode 100644 index 0000000..61c68ab --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -0,0 +1,208 @@ +package com.casic.qd.smartwell.view + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.AlarmListAdapter +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.utils.BroadcastReceiverManager +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_alarm_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference + +class AlarmSearchResultActivity : BaseActivity() { + + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var alarmViewModel: AlarmViewModel + private lateinit var args: ArrayList + private lateinit var alarmListAdapter: AlarmListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + override fun initLayoutView(): Int = R.layout.activity_alarm_search_result + + override fun setupTopBarLayout() { + titleView.text = "查询结果" + } + + override fun initData() { + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) + //注册广播接收者 + BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + //收到广播相当于做了一次列表刷新 + isRefresh = true + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + }) + } + + override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchAlarmViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022041501) + } + }) + searchAlarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + + //消警状态处理 + alarmViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + //刷新列表 + BroadcastReceiverManager.instance.sendBroadcast( + Constant.CANCEL_ALARM_ACTION, "" + ) + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchAlarmViewModel.obtainSearchResult( + args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex + ) + } + + private class WeakReferenceHandler(activity: AlarmSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022041501) { + if (activity.isRefresh || activity.isLoadMore) { + activity.alarmListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.alarmListAdapter + activity.alarmListAdapter.setOnItemClickListener(object : + AlarmListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].wellId.toString() + if (wellId.isBlank()) { + "井编号异常,无法查看详情".show() + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("确认操作") + .setMessage("确定取消报警吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + val alarmId = activity.dataBeans[position].id + if (alarmId.toString().isBlank()) { + "操作失败,告警ID异常".show() + return + } + activity.alarmViewModel.obtainOperationResult(alarmId!!) + } + + override fun onCancelClick() { + + } + }).build().show() + } + }) + } + } + } + } + } + + override fun onDestroy() { + super.onDestroy() + //解注册广播接收者,防止内存泄漏 + BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt new file mode 100644 index 0000000..cfc25d2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceSearchResultActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_search_result + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt index 526fa73..c86ee63 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt @@ -13,7 +13,7 @@ import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.utils.* import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.LoginInViewModel +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel import com.qmuiteam.qmui.util.QMUIStatusBarHelper import kotlinx.android.synthetic.main.activity_login.* @@ -21,7 +21,7 @@ class LoginActivity : BaseActivity() { private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var loginInViewModel: LoginInViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var userDetailViewModel: UserDetailViewModel private val textWatcher = object : TextWatcher { @@ -54,7 +54,7 @@ userNameView.setText(SaveKeyValues.getValue(Constant.ACCOUNT, "") as String) userPasswordView.setText(SaveKeyValues.getValue(Constant.PASSWORD, "") as String) authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - loginInViewModel = ViewModelProvider(this).get(LoginInViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) } @@ -100,18 +100,24 @@ val dataByPublicKey = RSAUtils.encryptDataByPublicKey(userPassword.toByteArray(), publicKey!!) //登录并获取Token,POST请求 - loginInViewModel.login(it.data!!.sid!!, account, dataByPublicKey) - loginInViewModel.resultModel.observe(this, { loginResult -> + loginViewModel.inn(it.data!!.sid!!, account, dataByPublicKey) + loginViewModel.resultModel.observe(this, { loginResult -> if (loginResult.code == 200) { AuthenticationHelper.saveToken(loginResult.data!!.token!!) - //获取token之后保存用户信息 + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() //验证成功登录 this.navigatePageTo(MainActivity::class.java) finish() } }) - loginInViewModel.loadState.observe(this, { loginState -> + loginViewModel.loadState.observe(this, { loginState -> when (loginState) { is LoadState.Success -> { "登录成功".show() diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 3f497c9..02435a3 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -17,11 +17,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel import com.casic.qd.smartwell.model.LineChartEntryModel -import com.casic.qd.smartwell.utils.AuthenticationHelper -import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.PageNavigationManager -import com.casic.qd.smartwell.vm.LoginOutViewModel +import com.casic.qd.smartwell.utils.* +import com.casic.qd.smartwell.vm.LoginViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog @@ -38,7 +35,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 - private lateinit var loginOutViewModel: LoginOutViewModel + private lateinit var loginViewModel: LoginViewModel private lateinit var waterViewModel: WaterStatisticsViewModel private val xAxisDate: MutableList = ArrayList() private val entryModels: MutableList = ArrayList() @@ -111,7 +108,7 @@ }) //初始化vm - loginOutViewModel = ViewModelProvider(this).get(LoginOutViewModel::class.java) + loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java) waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) weakReferenceHandler = WeakReferenceHandler(this) } @@ -127,19 +124,20 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - loginOutViewModel.loginOut() + loginViewModel.out() } override fun onCancelClick() {} }).build().show() } - loginOutViewModel.resultModel.observe(this, { - if (it.code == 200) { + loginViewModel.loadState.observe(this, { + if (it == LoadState.Success) { AuthenticationHelper.removeToken() this.navigatePageTo(LoginActivity::class.java) PageNavigationManager.finishAllActivity() } }) + rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 954cf2d..8f54163 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -6,20 +6,23 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.AreaModel import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmContentViewModel -import com.casic.qd.smartwell.vm.AlarmTypeViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel import com.casic.qd.smartwell.vm.AreaViewModel import com.casic.qd.smartwell.widgets.BottomAreaSheet import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* +import kotlinx.android.synthetic.main.activity_alarm_search.areaView +import kotlinx.android.synthetic.main.activity_alarm_search.clearButton +import kotlinx.android.synthetic.main.activity_alarm_search.searchButton +import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { - private lateinit var alarmTypeViewModel: AlarmTypeViewModel - private lateinit var alarmContentViewModel: AlarmContentViewModel + private lateinit var alarmViewModel: AlarmViewModel private lateinit var areaViewModel: AreaViewModel private var alarmType = "" private var alarmContent = "" @@ -33,18 +36,16 @@ override fun initData() { //告警类型 - alarmTypeViewModel = ViewModelProvider(this).get(AlarmTypeViewModel::class.java) - //告警内容 - alarmContentViewModel = ViewModelProvider(this).get(AlarmContentViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //区域 areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { alarmTypeView.setOnClickListener { - alarmTypeViewModel.obtainAlarmType() + alarmViewModel.obtainAlarmType() } - alarmTypeViewModel.typeModel.observe(this, { + alarmViewModel.typeModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警类型") @@ -65,9 +66,9 @@ alarmContentView.setOnClickListener { //获取类型对应的报警内容 - alarmContentViewModel.obtainAlarmContent(alarmType) + alarmViewModel.obtainAlarmContent(alarmType) } - alarmContentViewModel.contentModel.observe(this, { + alarmViewModel.contentModel.observe(this, { if (it.code == 200) { val sheetBuilder = BottomListSheetBuilder(this) sheetBuilder.setTitle("告警内容") @@ -152,7 +153,7 @@ searchButton.setOnClickListener { //页面跳转,将查询参数传过去 navigatePageTo( - SearchResultActivity::class.java, addAll( + AlarmSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), alarmType, areaId, @@ -165,6 +166,7 @@ clearButton.setChangeAlphaWhenPress(true) clearButton.setOnClickListener { + wellCodeView.setText("") alarmTypeView.text = "" alarmContentView.text = "" areaView.text = "" diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index a459183..853b311 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -1,18 +1,41 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* /** * @author a203 * @description 记录查询界面 - * @package com.casic.qd.smartwell.view * @date 2022/2/17 14:33 * @email 290677893@qq.com */ class SearchRecordActivity : BaseActivity() { + private val kTag = "SearchRecordActivity" + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var areaId = "" + override fun initLayoutView(): Int = R.layout.activity_search_record override fun setupTopBarLayout() { @@ -20,10 +43,135 @@ } override fun initData() { - + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + ownerShipView.text = tag + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + "权属单位", + "在线情况", + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt deleted file mode 100644 index 988b53d..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt +++ /dev/null @@ -1,222 +0,0 @@ -package com.casic.qd.smartwell.view - -import android.annotation.SuppressLint -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.os.Message -import androidx.lifecycle.ViewModelProvider -import androidx.recyclerview.widget.LinearLayoutManager -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.adapter.AlarmListAdapter -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.showEmptyPage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.BroadcastReceiverManager -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.DialogHelper -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.vm.CancelAlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel -import com.casic.qd.smartwell.widgets.CancelAlarmDialog -import kotlinx.android.synthetic.main.activity_alarm_search_result.* -import kotlinx.android.synthetic.main.include_base_title.* -import kotlinx.android.synthetic.main.include_empty_view.* -import java.lang.ref.WeakReference - -class SearchResultActivity : BaseActivity() { - - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel - private lateinit var cancelAlarmViewModel: CancelAlarmViewModel - private lateinit var args: ArrayList - private lateinit var alarmListAdapter: AlarmListAdapter - private var dataBeans: MutableList = ArrayList() - private var pageIndex = 1 - private var isRefresh = false - private var isLoadMore = false - - override fun initLayoutView(): Int = R.layout.activity_alarm_search_result - - override fun setupTopBarLayout() { - titleView.text = "查询结果" - } - - override fun initData() { - args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! - weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) - cancelAlarmViewModel = ViewModelProvider(this).get(CancelAlarmViewModel::class.java) - //注册广播接收者 - BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, - object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - //收到广播相当于做了一次列表刷新 - isRefresh = true - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - }) - } - - override fun initEvent() { - obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { - if (it.code == 200) { - val dataRows = it.data?.rows - when { - isRefresh -> { - dataBeans.clear() - dataBeans = dataRows!! - resultRefreshLayout.finishRefresh() - isRefresh = false - } - isLoadMore -> { - if (dataRows?.size == 0) { - "到底了,别拉了".show() - } - dataBeans.addAll(dataRows!!) - resultRefreshLayout.finishLoadMore() - isLoadMore = false - } - else -> { - dataBeans = dataRows!! - } - } - weakReferenceHandler.sendEmptyMessage(2022041501) - } - }) - searchAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - resultRefreshLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainSearchResult(args, pageIndex) - } - resultRefreshLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainSearchResult(args, pageIndex) - } - - //消警状态处理 - cancelAlarmViewModel.loadState.observe(this, { - when (it) { - is LoadState.Loading -> { - DialogHelper.showLoadingDialog(this, "处理中,请稍后") - } - is LoadState.Success -> { - DialogHelper.dismissLoadingDialog() - //刷新列表 - BroadcastReceiverManager.instance.sendBroadcast( - Constant.CANCEL_ALARM_ACTION, "" - ) - } - else -> { - DialogHelper.dismissLoadingDialog() - } - } - }) - } - - private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( - args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex - ) - } - - private class WeakReferenceHandler(activity: SearchResultActivity) : - Handler(Looper.getMainLooper()) { - private val reference: WeakReference = WeakReference(activity) - - @SuppressLint("NotifyDataSetChanged") - override fun handleMessage(msg: Message) { - super.handleMessage(msg) - val activity = reference.get()!! - if (msg.what == 2022041501) { - if (activity.isRefresh || activity.isLoadMore) { - activity.alarmListAdapter.notifyDataSetChanged() - } else { //首次加载数据 - if (activity.dataBeans.size == 0) { - activity.emptyView!!.showEmptyPage { - activity.obtainSearchResult(activity.args, activity.pageIndex) - } - } else { - activity.emptyView!!.hide() - activity.alarmListAdapter = AlarmListAdapter(activity, activity.dataBeans) - activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) - activity.resultRecyclerView!!.adapter = activity.alarmListAdapter - activity.alarmListAdapter.setOnItemClickListener(object : - AlarmListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - val wellId = activity.dataBeans[position].wellId.toString() - if (wellId.isBlank()) { - "井编号异常,无法查看详情".show() - return - } - activity.navigatePageTo(WellDetailActivity::class.java, wellId) - } - - override fun onOperationClicked(position: Int) { - val wellDetail = activity.dataBeans[position] - CancelAlarmDialog.Builder() - .setContext(activity) - .setTitle("取消告警") - .setHintMessage("请输入详细的告警取消原因") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(object : - CancelAlarmDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - spinnerValue: String, inputValue: String - ) { - /** - * http://111.198.10.15:20104/alarm/cancelAlarm?id=&jobStatus=3&handleMessage=2fsdf - * POST - * */ - val alarmId = wellDetail.id - if (alarmId.toString().isBlank()) { - "操作失败,告警ID异常".show() - return - } - val jobStatus = when (spinnerValue) { - "已处理" -> "3" - "无需处理" -> "4" - else -> "" - } - activity.cancelAlarmViewModel.obtainOperationResult( - alarmId!! - ) - } - - override fun onCancelClick() { - - } - }).build().show() - } - }) - } - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - //解注册广播接收者,防止内存泄漏 - BroadcastReceiverManager.instance.destroy(Constant.CANCEL_ALARM_ACTION) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt index 003d39e..7c050bb 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SplashScreenActivity.kt @@ -5,11 +5,13 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.vm.AuthenticateViewModel import com.casic.qd.smartwell.vm.UserDetailViewModel class SplashScreenActivity : BaseActivity() { private lateinit var userDetailViewModel: UserDetailViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel override fun initLayoutView(): Int = R.layout.activity_splash @@ -19,6 +21,7 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) } override fun initEvent() { @@ -27,7 +30,14 @@ private val countDownTimer = object : CountDownTimer(1000, 500) { override fun onFinish() { + /** + * 获取token之后保存用户信息 + * */ userDetailViewModel.obtainUserDetail() + /** + * 根据用户有权查看的设备类型 + */ + authenticateViewModel.obtainAuthorByDept() userDetailViewModel.flag.observe(this@SplashScreenActivity, { if (it) { navigatePageTo(MainActivity::class.java) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index 0129d7e..2d59345 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -9,8 +9,8 @@ import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.vm.AlarmListViewModel -import com.casic.qd.smartwell.vm.DeviceStatisticsViewModel +import com.casic.qd.smartwell.vm.AlarmViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry @@ -29,8 +29,8 @@ private val context: Context = this@StatisticsActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private lateinit var deviceViewModel: DeviceStatisticsViewModel - private lateinit var alarmViewModel: AlarmListViewModel + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var alarmViewModel: AlarmViewModel override fun initLayoutView(): Int = R.layout.activity_statistics @@ -40,8 +40,8 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - deviceViewModel = ViewModelProvider(this).get(DeviceStatisticsViewModel::class.java) - alarmViewModel = ViewModelProvider(this).get(AlarmListViewModel::class.java) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt deleted file mode 100644 index b12b37f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmContentModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmContentViewModel : BaseViewModel() { - - private val kTag = "AlarmContentViewModel" - private val gson = Gson() - val contentModel = MutableLiveData() - - fun obtainAlarmContent(type: String) = launch({ - val response = RetrofitServiceManager.obtainAlarmContent(type) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - contentModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt deleted file mode 100644 index c4282d1..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.model.AlarmSecondAreaModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmListViewModel : BaseViewModel() { - - private val kTag = "AlarmListViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - val areaDataModel = MutableLiveData() - - fun obtainAlarmList( - keywords: String, - alarmType: String, - areaId: String, - alarmContentType: String, - beginTime: String, - endTime: String, - status: String, - page: Int - ) = launch({ - val response = RetrofitServiceManager.obtainAlarmList( - keywords, - alarmType, - areaId, - alarmContentType, - beginTime, - endTime, - status, - page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) - - /** - * 获取近日告警统计 - */ - fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ - val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - areaDataModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt deleted file mode 100644 index c98d93c..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmTypeModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class AlarmTypeViewModel : BaseViewModel() { - - private val kTag = "AlarmTypeViewModel" - private val gson = Gson() - val typeModel = MutableLiveData() - - fun obtainAlarmType() = launch({ - val response = RetrofitServiceManager.obtainAlarmType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - typeModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt new file mode 100644 index 0000000..f39c6ce --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmViewModel.kt @@ -0,0 +1,125 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmContentModel +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.AlarmSecondAreaModel +import com.casic.qd.smartwell.model.AlarmTypeModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class AlarmViewModel : BaseViewModel() { + + private val kTag = "AlarmViewModel" + private val gson = Gson() + val typeModel = MutableLiveData() + val contentModel = MutableLiveData() + val listModel = MutableLiveData() + val areaDataModel = MutableLiveData() + + fun obtainAlarmType() = launch({ + val response = RetrofitServiceManager.obtainAlarmType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmContent(type: String) = launch({ + val response = RetrofitServiceManager.obtainAlarmContent(type) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + contentModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainAlarmList( + keywords: String, + alarmType: String, + areaId: String, + alarmContentType: String, + beginTime: String, + endTime: String, + status: String, + page: Int + ) = launch({ + val response = RetrofitServiceManager.obtainAlarmList( + keywords, + alarmType, + areaId, + alarmContentType, + beginTime, + endTime, + status, + page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + listModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取近日告警统计 + */ + fun alarmCountBySecondArea(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.alarmCountBySecondArea(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainOperationResult(alarmId: String) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainOperationResult(alarmId) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + "操作成功".show() + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 55ccc65..e688aa7 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -3,16 +3,23 @@ import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* +import com.casic.qd.smartwell.model.OwnerShipModel import com.casic.qd.smartwell.model.PublicKeyModel +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.SaveKeyValues import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import org.json.JSONObject class AuthenticateViewModel : BaseViewModel() { private val kTag = "AuthenticateViewModel" + private val gson = Gson() val keyModel = MutableLiveData() + val resultModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading @@ -21,4 +28,43 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + fun obtainAuthorByDept() = launch({ + val response = RetrofitServiceManager.obtainAuthorByDept() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val jsonObject = JSONObject(response) + val data = jsonObject.getJSONObject("data") + + val typeArray = data.getJSONArray("deviceTypes") + val types: MutableList = ArrayList() + for (i in 0 until typeArray.length()) { + types.add(typeArray.getString(i)) + } + SaveKeyValues.putValue(Constant.USER_DEVICE_TYPE, types.toJson()) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 权属单位 + */ + fun obtainOwnerShip(deptType: String) = launch({ + val response = RetrofitServiceManager.obtainOwnerShip(deptType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt deleted file mode 100644 index f27cf32..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class CancelAlarmViewModel : BaseViewModel() { - - private val kTag = "CancelAlarmViewModel" - private val gson = Gson() - private val resultModel = MutableLiveData() - - fun obtainOperationResult(alarmId: String) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainOperationResult(alarmId) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - "操作成功".show() - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt deleted file mode 100644 index ff7ab3f..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceStatisticsViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class DeviceStatisticsViewModel : BaseViewModel() { - - private val kTag = "DeviceStatisticsViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - /** - * 管网资产统计 - */ - fun deviceCountByType() = launch({ - val response = RetrofitServiceManager.deviceCountByType() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt new file mode 100644 index 0000000..02aefed --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -0,0 +1,58 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DeviceStatisticsModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class DeviceViewModel : BaseViewModel() { + + private val kTag = "DeviceViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + val typeModel = MutableLiveData() + + /** + * 管网资产统计 + */ + fun deviceCountByType() = launch({ + val response = RetrofitServiceManager.deviceCountByType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备类型 + */ + fun obtainDeviceType() = launch({ + val response = RetrofitServiceManager.obtainDeviceType() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + typeModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt deleted file mode 100644 index fc2678e..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.LoginResultModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginInViewModel : BaseViewModel() { - - private val kTag = "LoginInViewModel" - private val gson = Gson() - val resultModel = MutableLiveData() - - fun login(sid: String, account: String, secretKey: String) = launch({ - val response = RetrofitServiceManager.login(sid, account, secretKey) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt deleted file mode 100644 index 06d797a..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginOutViewModel.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.casic.qd.smartwell.vm - -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.CommonResultModel -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class LoginOutViewModel : BaseViewModel() { - - private val gson = Gson() - val resultModel = MutableLiveData() - - fun loginOut() = launch({ - val response = RetrofitServiceManager.loginOut() - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - resultModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - response.toErrorMessage().show() - } - }, { - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt new file mode 100644 index 0000000..69adbb6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginViewModel.kt @@ -0,0 +1,54 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.LoginResultModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class LoginViewModel : BaseViewModel() { + + private val kTag = "LoginViewModel" + private val gson = Gson() + val resultModel = MutableLiveData() + + fun inn(sid: String, account: String, secretKey: String) = launch({ + val response = RetrofitServiceManager.login(sid, account, secretKey) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun out() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.loginOut() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 8e40ee1..d2da377 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -43,6 +43,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) diff --git a/app/src/main/res/layout/activity_alarm_search_result.xml b/app/src/main/res/layout/activity_alarm_search_result.xml index c6512d5..9da12e5 100644 --- a/app/src/main/res/layout/activity_alarm_search_result.xml +++ b/app/src/main/res/layout/activity_alarm_search_result.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/mainBackColor" android:orientation="vertical" - tools:context=".view.SearchResultActivity"> + tools:context=".view.AlarmSearchResultActivity"> diff --git a/app/src/main/res/layout/activity_device_search_result.xml b/app/src/main/res/layout/activity_device_search_result.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_search_result.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_record.xml b/app/src/main/res/layout/activity_search_record.xml index 32c2b53..7ab2795 100644 --- a/app/src/main/res/layout/activity_search_record.xml +++ b/app/src/main/res/layout/activity_search_record.xml @@ -1,13 +1,160 @@ + android:background="@color/mainBackColor" + android:orientation="vertical" + tools:context=".view.SearchRecordActivity"> - + android:layout_height="0dp" + android:layout_weight="1"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cbb85d7..3c5147c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,11 +15,11 @@ #37D4AE #CCFF66 - #FF6600 + #FF6666 #FFCCCC #FFFF99 #CCCCFF - #9933FF + #6666FF #CCFF66 #66CCCC \ No newline at end of file