diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_on_map.xml b/app/src/main/res/layout/activity_device_on_map.xml
new file mode 100644
index 0000000..85b3c9a
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_on_map.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_on_map.xml b/app/src/main/res/layout/activity_device_on_map.xml
new file mode 100644
index 0000000..85b3c9a
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_on_map.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_alarm.xml b/app/src/main/res/layout/fragment_alarm.xml
index 04881f3..61f890d 100644
--- a/app/src/main/res/layout/fragment_alarm.xml
+++ b/app/src/main/res/layout/fragment_alarm.xml
@@ -1,5 +1,6 @@
-
+ android:layout_marginTop="@dimen/dp_10">
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_on_map.xml b/app/src/main/res/layout/activity_device_on_map.xml
new file mode 100644
index 0000000..85b3c9a
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_on_map.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_alarm.xml b/app/src/main/res/layout/fragment_alarm.xml
index 04881f3..61f890d 100644
--- a/app/src/main/res/layout/fragment_alarm.xml
+++ b/app/src/main/res/layout/fragment_alarm.xml
@@ -1,5 +1,6 @@
-
+ android:layout_marginTop="@dimen/dp_10">
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 5a2d4ad..541617c 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -24,7 +24,10 @@
+ android:layout_height="match_parent" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_on_map.xml b/app/src/main/res/layout/activity_device_on_map.xml
new file mode 100644
index 0000000..85b3c9a
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_on_map.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_alarm.xml b/app/src/main/res/layout/fragment_alarm.xml
index 04881f3..61f890d 100644
--- a/app/src/main/res/layout/fragment_alarm.xml
+++ b/app/src/main/res/layout/fragment_alarm.xml
@@ -1,5 +1,6 @@
-
+ android:layout_marginTop="@dimen/dp_10">
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 5a2d4ad..541617c 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -24,7 +24,10 @@
+ android:layout_height="match_parent" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml
new file mode 100644
index 0000000..724d2ba
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv_l.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_on_map.xml b/app/src/main/res/layout/activity_device_on_map.xml
new file mode 100644
index 0000000..85b3c9a
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_on_map.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_alarm.xml b/app/src/main/res/layout/fragment_alarm.xml
index 04881f3..61f890d 100644
--- a/app/src/main/res/layout/fragment_alarm.xml
+++ b/app/src/main/res/layout/fragment_alarm.xml
@@ -1,5 +1,6 @@
-
+ android:layout_marginTop="@dimen/dp_10">
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 5a2d4ad..541617c 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -24,7 +24,10 @@
+ android:layout_height="match_parent" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml
new file mode 100644
index 0000000..724d2ba
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv_l.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxxhdpi/map_pin.png b/app/src/main/res/mipmap-xxxhdpi/map_pin.png
new file mode 100644
index 0000000..674c628
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/map_pin.png
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5f605ca..1fe841c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
new file mode 100644
index 0000000..9996a4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/AlarmAdapter.kt
@@ -0,0 +1,54 @@
+package com.casic.smart.town.sanxi.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.model.AlarmListModel
+
+class AlarmAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_alarm_rv_l, parent, false)
+ )
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+
+ holder.deviceTypeNameView.text = String.format("设备类型:${rowsBean.deviceTypeName}")
+ holder.deviceStateView.text = rowsBean.onlineStateName
+ holder.locationView.text = String.format("异常点位置:${rowsBean.position}")
+ holder.installDateView.text = String.format("安装时间:${rowsBean.installDate}")
+
+ holder.itemView.setOnClickListener {
+ listener?.onClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var deviceTypeNameView: TextView = view.findViewById(R.id.deviceTypeNameView)
+ var deviceStateView: TextView = view.findViewById(R.id.deviceStateView)
+ var locationView: TextView = view.findViewById(R.id.locationView)
+ var installDateView: TextView = view.findViewById(R.id.installDateView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
index 650e201..84ca796 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/AlarmPageFragment.kt
@@ -1,9 +1,27 @@
package com.casic.smart.town.sanxi.fragment
+import android.os.Handler
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.adapter.AlarmAdapter
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.view.DeviceOnMapActivity
+import com.casic.smart.town.sanxi.vm.AlarmViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import kotlinx.android.synthetic.main.fragment_alarm.*
-class AlarmPageFragment: KotlinBaseFragment() {
+class AlarmPageFragment : KotlinBaseFragment() {
+
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var alarmViewModel: AlarmViewModel
+ private lateinit var alarmAdapter: AlarmAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initLayoutView(): Int = R.layout.fragment_alarm
@@ -16,10 +34,79 @@
}
override fun initData() {
-
+ weakReferenceHandler = WeakReferenceHandler(callback)
+ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
+ alarmViewModel.resultModel.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows!!
+ alarmRefreshLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows?.size == 0) {
+ "到底了,别拉了".show(requireContext())
+ }
+ dataBeans.addAll(dataRows!!)
+ alarmRefreshLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows!!
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2022102801)
+ }
+ })
}
override fun initEvent() {
+ alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListData()
+ }
+ alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListData()
+ }
+ }
+ override fun onResume() {
+ super.onResume()
+ pageIndex = 1
+ getAlarmListData()
+ }
+
+ private fun getAlarmListData() {
+ alarmViewModel.getAlarmListData("", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ if (it.what == 2022102801) {
+ if (isRefresh || isLoadMore) {
+ alarmAdapter.notifyDataSetChanged()
+ } else {
+ alarmAdapter = AlarmAdapter(requireContext(), dataBeans)
+ alarmRecyclerView!!.adapter = alarmAdapter
+ alarmAdapter.setOnItemClickListener(object :
+ AlarmAdapter.OnItemClickListener {
+ override fun onClicked(position: Int) {
+ val deviceId = dataBeans[position].id.toString()
+ if (deviceId.isBlank()) {
+ "设备ID异常,无法查看位置".show(requireContext())
+ return
+ }
+ requireContext().navigatePageTo(deviceId)
+ }
+ })
+ }
+ }
+ true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
new file mode 100644
index 0000000..8c51878
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmListModel.java
@@ -0,0 +1,256 @@
+package com.casic.smart.town.sanxi.model;
+
+import java.util.List;
+
+public class AlarmListModel {
+
+ private int code;
+ private DataModel data;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public static class DataModel {
+ private List rows;
+
+ public List getRows() {
+ return rows;
+ }
+
+ public void setRows(List rows) {
+ this.rows = rows;
+ }
+
+ public static class RowsModel {
+ private String bfzt;
+ private String bfztName;
+ private String communication;
+ private String concenCode;
+ private String concenId;
+ private String deptName;
+ private String deptid;
+ private String devcode;
+ private String deviceName;
+ private String deviceType;
+ private String deviceTypeName;
+ private String id;
+ private String installDate;
+ private String installHeight;
+ private String modelId;
+ private String modelName;
+ private String onlineState;
+ private String onlineStateName;
+ private String position;
+ private String ts;
+ private String valid;
+ private String watchType;
+ private String wellCode;
+ private String wellId;
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCommunication() {
+ return communication;
+ }
+
+ public void setCommunication(String communication) {
+ this.communication = communication;
+ }
+
+ public String getConcenCode() {
+ return concenCode;
+ }
+
+ public void setConcenCode(String concenCode) {
+ this.concenCode = concenCode;
+ }
+
+ public String getConcenId() {
+ return concenId;
+ }
+
+ public void setConcenId(String concenId) {
+ this.concenId = concenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDevcode() {
+ return devcode;
+ }
+
+ public void setDevcode(String devcode) {
+ this.devcode = devcode;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public void setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public void setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ }
+
+ public String getDeviceTypeName() {
+ return deviceTypeName;
+ }
+
+ public void setDeviceTypeName(String deviceTypeName) {
+ this.deviceTypeName = deviceTypeName;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getInstallDate() {
+ return installDate;
+ }
+
+ public void setInstallDate(String installDate) {
+ this.installDate = installDate;
+ }
+
+ public String getInstallHeight() {
+ return installHeight;
+ }
+
+ public void setInstallHeight(String installHeight) {
+ this.installHeight = installHeight;
+ }
+
+ public String getModelId() {
+ return modelId;
+ }
+
+ public void setModelId(String modelId) {
+ this.modelId = modelId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getOnlineState() {
+ return onlineState;
+ }
+
+ public void setOnlineState(String onlineState) {
+ this.onlineState = onlineState;
+ }
+
+ public String getOnlineStateName() {
+ return onlineStateName;
+ }
+
+ public void setOnlineStateName(String onlineStateName) {
+ this.onlineStateName = onlineStateName;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWatchType() {
+ return watchType;
+ }
+
+ public void setWatchType(String watchType) {
+ this.watchType = watchType;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellId() {
+ return wellId;
+ }
+
+ public void setWellId(String wellId) {
+ this.wellId = wellId;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
new file mode 100644
index 0000000..6632b4a
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellInfoModel.java
@@ -0,0 +1,305 @@
+package com.casic.smart.town.sanxi.model;
+
+public class WellInfoModel {
+
+ private int code;
+ private DataModel data;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataModel getData() {
+ return data;
+ }
+
+ public void setData(DataModel data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public static class DataModel {
+ private String area;
+ private String bfzt;
+ private String bfztName;
+ private String coordinateX;
+ private String coordinateY;
+ private String deep;
+ private String deptName;
+ private String deptid;
+ private String deviceCount;
+ private String id;
+ private String latBaidu;
+ private String latGaode;
+ private String lngBaidu;
+ private String lngGaode;
+ private String notes;
+ private String photos;
+ private String position;
+ private String qu;
+ private String responsibleDept;
+ private String responsibleDeptName;
+ private String ts;
+ private String valid;
+ private String wellCode;
+ private String wellFlag1;
+ private String wellFlag2;
+ private String wellFlag3;
+ private String wellName;
+ private String wellType;
+ private String wellTypeName;
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getBfzt() {
+ return bfzt;
+ }
+
+ public void setBfzt(String bfzt) {
+ this.bfzt = bfzt;
+ }
+
+ public String getBfztName() {
+ return bfztName;
+ }
+
+ public void setBfztName(String bfztName) {
+ this.bfztName = bfztName;
+ }
+
+ public String getCoordinateX() {
+ return coordinateX;
+ }
+
+ public void setCoordinateX(String coordinateX) {
+ this.coordinateX = coordinateX;
+ }
+
+ public String getCoordinateY() {
+ return coordinateY;
+ }
+
+ public void setCoordinateY(String coordinateY) {
+ this.coordinateY = coordinateY;
+ }
+
+ public String getDeep() {
+ return deep;
+ }
+
+ public void setDeep(String deep) {
+ this.deep = deep;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getDeptid() {
+ return deptid;
+ }
+
+ public void setDeptid(String deptid) {
+ this.deptid = deptid;
+ }
+
+ public String getDeviceCount() {
+ return deviceCount;
+ }
+
+ public void setDeviceCount(String deviceCount) {
+ this.deviceCount = deviceCount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getLatBaidu() {
+ return latBaidu;
+ }
+
+ public void setLatBaidu(String latBaidu) {
+ this.latBaidu = latBaidu;
+ }
+
+ public String getLatGaode() {
+ return latGaode;
+ }
+
+ public void setLatGaode(String latGaode) {
+ this.latGaode = latGaode;
+ }
+
+ public String getLngBaidu() {
+ return lngBaidu;
+ }
+
+ public void setLngBaidu(String lngBaidu) {
+ this.lngBaidu = lngBaidu;
+ }
+
+ public String getLngGaode() {
+ return lngGaode;
+ }
+
+ public void setLngGaode(String lngGaode) {
+ this.lngGaode = lngGaode;
+ }
+
+ public String getNotes() {
+ return notes;
+ }
+
+ public void setNotes(String notes) {
+ this.notes = notes;
+ }
+
+ public String getPhotos() {
+ return photos;
+ }
+
+ public void setPhotos(String photos) {
+ this.photos = photos;
+ }
+
+ public String getPosition() {
+ return position;
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getQu() {
+ return qu;
+ }
+
+ public void setQu(String qu) {
+ this.qu = qu;
+ }
+
+ public String getResponsibleDept() {
+ return responsibleDept;
+ }
+
+ public void setResponsibleDept(String responsibleDept) {
+ this.responsibleDept = responsibleDept;
+ }
+
+ public String getResponsibleDeptName() {
+ return responsibleDeptName;
+ }
+
+ public void setResponsibleDeptName(String responsibleDeptName) {
+ this.responsibleDeptName = responsibleDeptName;
+ }
+
+ public String getTs() {
+ return ts;
+ }
+
+ public void setTs(String ts) {
+ this.ts = ts;
+ }
+
+ public String getValid() {
+ return valid;
+ }
+
+ public void setValid(String valid) {
+ this.valid = valid;
+ }
+
+ public String getWellCode() {
+ return wellCode;
+ }
+
+ public void setWellCode(String wellCode) {
+ this.wellCode = wellCode;
+ }
+
+ public String getWellFlag1() {
+ return wellFlag1;
+ }
+
+ public void setWellFlag1(String wellFlag1) {
+ this.wellFlag1 = wellFlag1;
+ }
+
+ public String getWellFlag2() {
+ return wellFlag2;
+ }
+
+ public void setWellFlag2(String wellFlag2) {
+ this.wellFlag2 = wellFlag2;
+ }
+
+ public String getWellFlag3() {
+ return wellFlag3;
+ }
+
+ public void setWellFlag3(String wellFlag3) {
+ this.wellFlag3 = wellFlag3;
+ }
+
+ public String getWellName() {
+ return wellName;
+ }
+
+ public void setWellName(String wellName) {
+ this.wellName = wellName;
+ }
+
+ public String getWellType() {
+ return wellType;
+ }
+
+ public void setWellType(String wellType) {
+ this.wellType = wellType;
+ }
+
+ public String getWellTypeName() {
+ return wellTypeName;
+ }
+
+ public void setWellTypeName(String wellTypeName) {
+ this.wellTypeName = wellTypeName;
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
index 5b814d3..8b286d1 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -73,4 +73,22 @@
* */
@GET("/statics/deviceStaticsByType")
suspend fun countDevice(@Header("token") token: String): String
+
+ /**
+ * 异常设备状态列表
+ * */
+ @GET("/statics/deviceListPage")
+ suspend fun getAlarmListData(
+ @Header("token") token: String,
+ @Query("beginTime") beginTime: String,
+ @Query("endTime") endTime: String,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ @GET("/statics/devicePosition")
+ suspend fun queryWellInfo(
+ @Header("token") token: String,
+ @Query("deviceId") deviceId: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
index 0d9cfc7..43c3d7d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -79,4 +79,18 @@
suspend fun countDevice(): String {
return smartTownApi.countDevice(AuthenticationHelper.token!!)
}
+
+ suspend fun getAlarmListData(beginTime: String, endTime: String, offset: Int): String {
+ return smartTownApi.getAlarmListData(
+ AuthenticationHelper.token!!,
+ beginTime,
+ endTime,
+ LocaleConstant.PAGE_LIMIT,
+ offset
+ )
+ }
+
+ suspend fun queryWellInfo(deviceId: String): String {
+ return smartTownApi.queryWellInfo(AuthenticationHelper.token!!, deviceId)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
new file mode 100644
index 0000000..c31f25d
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/DeviceOnMapActivity.kt
@@ -0,0 +1,117 @@
+package com.casic.smart.town.sanxi.view
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.amap.api.maps.AMap
+import com.amap.api.maps.AMapOptions
+import com.amap.api.maps.CameraUpdateFactory
+import com.amap.api.maps.CoordinateConverter
+import com.amap.api.maps.model.BitmapDescriptorFactory
+import com.amap.api.maps.model.CameraPosition
+import com.amap.api.maps.model.LatLng
+import com.amap.api.maps.model.MarkerOptions
+import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.util.LoadingDialogHub
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.vm.LoadState
+import kotlinx.android.synthetic.main.activity_device_on_map.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class DeviceOnMapActivity : AppCompatActivity() {
+
+ private val kTag = "DeviceOnMapActivity"
+ private lateinit var wellViewModel: WellViewModel
+ private lateinit var aMap: AMap
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_device_on_map)
+
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
+ titleView.text = "异常报警位置"
+ leftBackView.setOnClickListener { finish() }
+
+ setMapConfig(savedInstanceState)
+
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ wellViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ })
+ wellViewModel.queryWellInfo(deviceId)
+ wellViewModel.wellResultModel.observe(this, {
+ if (it.code == 200) {
+ val lat = it.data.latGaode.toString()
+ val lng = it.data.lngGaode.toString()
+ if (lat.isNotBlank() && lng.isNotBlank()) {
+ //返回true代表当前位置在大陆、港澳地区,反之不在
+ val latitude = lat.toDouble()
+ val longitude = lng.toDouble()
+ if (CoordinateConverter.isAMapDataAvailable(latitude, longitude)) {
+ val latLng = LatLng(latitude, longitude)
+ //移动到指定经纬度
+ val cameraPosition = CameraPosition(latLng, 16f, 0f, 0f)
+ val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
+ aMap.animateCamera(cameraUpdate, 2000, null)
+
+ aMap.addMarker(
+ MarkerOptions()
+ .position(latLng)
+ .icon(
+ BitmapDescriptorFactory.fromBitmap(
+ BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap
+ )
+ )
+ .title("")
+ .snippet("")
+ )
+ }
+ } else {
+ "经纬度异常".show(this)
+ }
+ }
+ })
+ }
+
+ private fun setMapConfig(savedInstanceState: Bundle?) {
+ mapView.onCreate(savedInstanceState)
+ aMap = mapView.map
+ aMap.mapType = AMap.MAP_TYPE_NORMAL
+ val uiSettings = aMap.uiSettings
+ uiSettings.isCompassEnabled = true
+ uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
+ uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
+ }
+
+ /***以下是地图生命周期管理************************************************************************/
+ override fun onResume() {
+ super.onResume()
+ mapView.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mapView.onPause()
+ }
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ mapView.onSaveInstanceState(outState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mapView.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
new file mode 100644
index 0000000..9716725
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AlarmViewModel.kt
@@ -0,0 +1,33 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.AlarmListModel
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+
+class AlarmViewModel : BaseViewModel() {
+
+ private val gson by lazy { Gson() }
+ val resultModel = MutableLiveData()
+
+ fun getAlarmListData(beginTime: String, endTime: String, offset: Int) = launch({
+ val response = RetrofitServiceManager.getAlarmListData(beginTime, endTime, offset)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ resultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
index 87ddbf8..f159635 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/AuthenticateViewModel.kt
@@ -15,7 +15,7 @@
class AuthenticateViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val keyModel = MutableLiveData()
fun obtainPublicKey() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
index c377c61..1bff381 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/LoginViewModel.kt
@@ -16,7 +16,7 @@
class LoginViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val enterResultModel = MutableLiveData()
val outResultModel = MutableLiveData()
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
index 29a8756..dd1f190 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/UserViewModel.kt
@@ -17,7 +17,7 @@
class UserViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val userDetailModel = MutableLiveData()
fun obtainUserDetail() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
index 20ea457..4f9e68f 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/VersionViewModel.kt
@@ -15,7 +15,7 @@
class VersionViewModel : BaseViewModel() {
- private val gson = Gson()
+ private val gson by lazy { Gson() }
val versionResultModel = MutableLiveData()
fun updateVersion() = launch({
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
index c7d0219..6ed56a4 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -4,15 +4,21 @@
import com.casic.smart.town.sanxi.base.BaseApplication
import com.casic.smart.town.sanxi.extensions.separateResponseCode
import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.model.WellInfoModel
import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
import org.json.JSONObject
class WellViewModel : BaseViewModel() {
+ private val gson by lazy { Gson() }
val countResultModel = MutableLiveData>()
+ val wellResultModel = MutableLiveData()
fun countWellByState() = launch({
val response = RetrofitServiceManager.countWellByState()
@@ -40,4 +46,22 @@
value
}
}
+
+ fun queryWellInfo(deviceId: String) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.queryWellInfo(deviceId)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ wellResultModel.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_device_on_map.xml b/app/src/main/res/layout/activity_device_on_map.xml
new file mode 100644
index 0000000..85b3c9a
--- /dev/null
+++ b/app/src/main/res/layout/activity_device_on_map.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_alarm.xml b/app/src/main/res/layout/fragment_alarm.xml
index 04881f3..61f890d 100644
--- a/app/src/main/res/layout/fragment_alarm.xml
+++ b/app/src/main/res/layout/fragment_alarm.xml
@@ -1,5 +1,6 @@
-
+ android:layout_marginTop="@dimen/dp_10">
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 5a2d4ad..541617c 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -24,7 +24,10 @@
+ android:layout_height="match_parent" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_alarm_rv_l.xml b/app/src/main/res/layout/item_alarm_rv_l.xml
new file mode 100644
index 0000000..724d2ba
--- /dev/null
+++ b/app/src/main/res/layout/item_alarm_rv_l.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxxhdpi/map_pin.png b/app/src/main/res/mipmap-xxxhdpi/map_pin.png
new file mode 100644
index 0000000..674c628
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/map_pin.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/well_location.png b/app/src/main/res/mipmap-xxxhdpi/well_location.png
new file mode 100644
index 0000000..b89a974
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/well_location.png
Binary files differ