diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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 f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_gray.xml b/app/src/main/res/drawable/bg_view_gray.xml new file mode 100644 index 0000000..4f54c88 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_gray.xml b/app/src/main/res/drawable/bg_view_gray.xml new file mode 100644 index 0000000..4f54c88 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_green.xml b/app/src/main/res/drawable/bg_view_green.xml new file mode 100644 index 0000000..db18d54 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_green.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_gray.xml b/app/src/main/res/drawable/bg_view_gray.xml new file mode 100644 index 0000000..4f54c88 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_green.xml b/app/src/main/res/drawable/bg_view_green.xml new file mode 100644 index 0000000..db18d54 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_green.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_gray.xml b/app/src/main/res/drawable/bg_view_gray.xml new file mode 100644 index 0000000..4f54c88 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_green.xml b/app/src/main/res/drawable/bg_view_green.xml new file mode 100644 index 0000000..db18d54 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_green.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_search_result.xml b/app/src/main/res/layout/activity_device_search_result.xml index 77d9ef6..a71ad17 100644 --- a/app/src/main/res/layout/activity_device_search_result.xml +++ b/app/src/main/res/layout/activity_device_search_result.xml @@ -1,6 +1,41 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical" + tools:context=".view.DeviceSearchResultActivity"> - \ No newline at end of file + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_gray.xml b/app/src/main/res/drawable/bg_view_gray.xml new file mode 100644 index 0000000..4f54c88 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_green.xml b/app/src/main/res/drawable/bg_view_green.xml new file mode 100644 index 0000000..db18d54 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_green.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_search_result.xml b/app/src/main/res/layout/activity_device_search_result.xml index 77d9ef6..a71ad17 100644 --- a/app/src/main/res/layout/activity_device_search_result.xml +++ b/app/src/main/res/layout/activity_device_search_result.xml @@ -1,6 +1,41 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical" + tools:context=".view.DeviceSearchResultActivity"> - \ No newline at end of file + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_recycleview.xml b/app/src/main/res/layout/item_device_recycleview.xml new file mode 100644 index 0000000..a68ac1d --- /dev/null +++ b/app/src/main/res/layout/item_device_recycleview.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f11ea34..82386c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,6 +50,7 @@ + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt new file mode 100644 index 0000000..be20872 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -0,0 +1,69 @@ +package com.casic.qd.smartwell.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.deviceTypeView.text = rowsBean.deviceTypeName + holder.deviceCodeView.text = rowsBean.devcode + holder.wellCodeView.text = String.format("井编号:${rowsBean.wellCode}") + if (rowsBean.onlineState == "1") { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_green) + } else { + holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) + } + holder.devLocationView.text = rowsBean.position + holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var deviceTypeView: QMUIRoundButton = view.findViewById(R.id.deviceTypeView) + var deviceCodeView: TextView = view.findViewById(R.id.deviceCodeView) + var deviceStateView: ImageView = view.findViewById(R.id.deviceStateView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var devInstallTimeView: TextView = view.findViewById(R.id.devInstallTimeView) + } + + 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/qd/smartwell/model/DeviceListModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt new file mode 100644 index 0000000..955a38e --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceListModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceListModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var rows: MutableList? = null + var total = 0 + + class RowsBean { + var area: String? = null + var areaFullName: String? = null + var bfzt: String? = null + var bfztName: String? = null + var communication: String? = null + var concenCode: String? = null + var concenId: String? = null + var dayCount: String? = null + var deptName: String? = null + var deptid: String? = null + var devcode: String? = null + var deviceName: String? = null + var deviceType: String? = null + var deviceTypeName: String? = null + var id: String? = null + var installDate: String? = null + var latitude: String? = null + var longitude: String? = null + var modelId: String? = null + var modelName: String? = null + var monthCount: String? = null + var onlineState: String? = null + var onlineStateName: String? = null + var position: String? = null + var statusName: String? = null + var totalCount: String? = null + var ts: String? = null + var uptime: String? = null + var valid: String? = null + var watchNum: String? = null + var watchType: String? = null + var wellCode: String? = null + var wellId: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 9496bf4..c5bf469 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,7 +123,7 @@ * 查询告警 * */ @GET("/alarm/list") - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( @Header("token") token: String, @Query("keywords") keywords: String?, @Query("alarmType") alarmType: String?, @@ -187,4 +187,19 @@ @Header("token") token: String, @Query("deptType") deptType: String ): String + + /** + * 查询设备列表 + * */ + @GET("/device/list") + suspend fun obtainDeviceResult( + @Header("token") token: String, + @Query("keywords") keywords: String?, + @Query("deviceType") deviceType: String?, + @Query("deptid") deptid: String?, + @Query("isOnline") isOnline: String?, + @Query("areaId") areaId: String?, + @Query("offset") offset: Int, + @Query("limit") limit: Int + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 575b2a9..6f728e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -116,7 +116,7 @@ /** * 查询告警 */ - suspend fun obtainSearchResult( + suspend fun obtainAlarmResult( keywords: String?, alarmType: String?, areaId: String?, @@ -126,7 +126,7 @@ status: String?, page: Int ): String { - return api.obtainSearchResult( + return api.obtainAlarmResult( AuthenticationHelper.token!!, keywords, alarmType, @@ -181,4 +181,27 @@ suspend fun obtainOwnerShip(deptType: String): String { return api.obtainOwnerShip(AuthenticationHelper.token!!, deptType) } + + /** + * 查询设备列表 + */ + suspend fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ): String { + return api.obtainDeviceResult( + AuthenticationHelper.token!!, + keywords, + deviceType, + deptId, + isOnline, + areaId, + page, + Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt index 61c68ab..b909fa1 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/AlarmSearchResultActivity.kt @@ -21,7 +21,7 @@ import com.casic.qd.smartwell.utils.DialogHelper import com.casic.qd.smartwell.utils.LoadState import com.casic.qd.smartwell.vm.AlarmViewModel -import com.casic.qd.smartwell.vm.SearchAlarmViewModel +import com.casic.qd.smartwell.vm.SearchResultViewModel import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_alarm_search_result.* import kotlinx.android.synthetic.main.include_base_title.* @@ -31,7 +31,7 @@ class AlarmSearchResultActivity : BaseActivity() { private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var searchAlarmViewModel: SearchAlarmViewModel + private lateinit var searchAlarmViewModel: SearchResultViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var args: ArrayList private lateinit var alarmListAdapter: AlarmListAdapter @@ -49,7 +49,7 @@ override fun initData() { args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! weakReferenceHandler = WeakReferenceHandler(this) - searchAlarmViewModel = ViewModelProvider(this).get(SearchAlarmViewModel::class.java) + searchAlarmViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java) //注册广播接收者 BroadcastReceiverManager.instance.addAction(Constant.CANCEL_ALARM_ACTION, @@ -65,7 +65,7 @@ override fun initEvent() { obtainSearchResult(args, pageIndex) - searchAlarmViewModel.listModel.observe(this, { + searchAlarmViewModel.alarmResultModel.observe(this, { if (it.code == 200) { val dataRows = it.data?.rows when { @@ -90,6 +90,7 @@ weakReferenceHandler.sendEmptyMessage(2022041501) } }) + searchAlarmViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { @@ -100,6 +101,7 @@ } } }) + resultRefreshLayout.setOnRefreshListener { isRefresh = true //刷新之后页码重置 @@ -133,7 +135,7 @@ } private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { - searchAlarmViewModel.obtainSearchResult( + searchAlarmViewModel.obtainAlarmResult( args[0], args[1], args[2], args[3], args[4], args[5], "1", pageIndex ) } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt new file mode 100644 index 0000000..08c5ecc --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -0,0 +1,21 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity + +class DeviceDataDetailActivity : BaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_device_detail + + override fun setupTopBarLayout() { + + } + + override fun initData() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt index cfc25d2..c70e4c6 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceSearchResultActivity.kt @@ -1,21 +1,143 @@ package com.casic.qd.smartwell.view +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.adapter.DeviceListAdapter import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.SearchResultViewModel +import kotlinx.android.synthetic.main.activity_device_search_result.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference class DeviceSearchResultActivity : BaseActivity() { + private lateinit var args: ArrayList + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var searchDeviceViewModel: SearchResultViewModel + private lateinit var deviceListAdapter: DeviceListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + override fun initLayoutView(): Int = R.layout.activity_device_search_result override fun setupTopBarLayout() { - + titleView.text = "查询结果" } override fun initData() { - + args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! + weakReferenceHandler = WeakReferenceHandler(this) + searchDeviceViewModel = ViewModelProvider(this).get(SearchResultViewModel::class.java) } override fun initEvent() { + obtainSearchResult(args, pageIndex) + searchDeviceViewModel.deviceResultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + resultRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show() + } + dataBeans.addAll(dataRows!!) + resultRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022042001) + } + }) + searchDeviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(args, pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(args, pageIndex) + } + } + + private fun obtainSearchResult(args: ArrayList, pageIndex: Int) { + searchDeviceViewModel.obtainDeviceResult( + args[0], args[1], args[2], args[3], args[4], pageIndex + ) + } + + private class WeakReferenceHandler(activity: DeviceSearchResultActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (activity.isRefresh || activity.isLoadMore) { + activity.deviceListAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.args, activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.deviceListAdapter = DeviceListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.deviceListAdapter + activity.deviceListAdapter.setOnItemClickListener(object : + DeviceListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val deviceCode = activity.dataBeans[position].devcode.toString() + if (deviceCode.isBlank()) { + "设备编号异常,无法查看历史数据".show() + return + } + activity.navigatePageTo( + DeviceDataDetailActivity::class.java, deviceCode + ) + } + }) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt index 853b311..142be88 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt @@ -28,12 +28,13 @@ */ class SearchRecordActivity : BaseActivity() { - private val kTag = "SearchRecordActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var authenticateViewModel: AuthenticateViewModel private lateinit var areaViewModel: AreaViewModel private var authenticatedType: MutableList = ArrayList() private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "0" private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_search_record @@ -85,7 +86,7 @@ }) ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("") + authenticateViewModel.obtainOwnerShip("03") } authenticateViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -99,8 +100,9 @@ sheetBuilder.addItem(model.name) } sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> + .setOnSheetItemClickListener { dialog, _, position, tag -> ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() dialog.dismiss() }.build().show() @@ -115,6 +117,11 @@ .setGravityCenter(true) .setOnSheetItemClickListener { dialog, _, _, tag -> deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } dialog.dismiss() }.build().show() @@ -158,8 +165,8 @@ DeviceSearchResultActivity::class.java, addAll( wellCodeView.text.toString().trim(), deviceTypeValue, - "权属单位", - "在线情况", + deptId, + deviceState, areaId ) ) diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt deleted file mode 100644 index 1ae3407..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.casic.qd.smartwell.vm - -import android.util.Log -import androidx.lifecycle.MutableLiveData -import com.casic.qd.smartwell.base.BaseViewModel -import com.casic.qd.smartwell.extensions.launch -import com.casic.qd.smartwell.extensions.separateResponseCode -import com.casic.qd.smartwell.extensions.show -import com.casic.qd.smartwell.extensions.toErrorMessage -import com.casic.qd.smartwell.model.AlarmListModel -import com.casic.qd.smartwell.utils.LoadState -import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken - -class SearchAlarmViewModel : BaseViewModel() { - - private val kTag = "SearchAlarmViewModel" - private val gson = Gson() - val listModel = MutableLiveData() - - fun obtainSearchResult( - keywords: String?, - alarmType: String?, - areaId: String?, - alarmContentType: String?, - beginTime: String?, - endTime: String?, - status: String?, - page: Int - ) = launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.obtainSearchResult( - keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page - ) - val responseCode = response.separateResponseCode() - if (responseCode == 200) { - loadState.value = LoadState.Success - listModel.value = gson.fromJson( - response, object : TypeToken() {}.type - ) - } else { - loadState.value = LoadState.Fail - response.toErrorMessage().show() - } - }, { - loadState.value = LoadState.Fail - Log.e(kTag, it.toString(), it) - "服务器异常".show() - }) -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt new file mode 100644 index 0000000..f915e14 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchResultViewModel.kt @@ -0,0 +1,81 @@ +package com.casic.qd.smartwell.vm + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import com.casic.qd.smartwell.base.BaseViewModel +import com.casic.qd.smartwell.extensions.launch +import com.casic.qd.smartwell.extensions.separateResponseCode +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.AlarmListModel +import com.casic.qd.smartwell.model.DeviceListModel +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class SearchResultViewModel : BaseViewModel() { + + private val kTag = "SearchResultViewModel" + private val gson = Gson() + val alarmResultModel = MutableLiveData() + val deviceResultModel = MutableLiveData() + + fun obtainAlarmResult( + keywords: String?, + alarmType: String?, + areaId: String?, + alarmContentType: String?, + beginTime: String?, + endTime: String?, + status: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainAlarmResult( + keywords, alarmType, areaId, alarmContentType, beginTime, endTime, status, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + fun obtainDeviceResult( + keywords: String?, + deviceType: String?, + deptId: String?, + isOnline: String?, + areaId: String?, + page: Int + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceResult( + keywords, deviceType, deptId, isOnline, areaId, page + ) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show() + } + }, { + loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_solid_layout_green.xml b/app/src/main/res/drawable/bg_solid_layout_green.xml index f600a12..cba83af 100644 --- a/app/src/main/res/drawable/bg_solid_layout_green.xml +++ b/app/src/main/res/drawable/bg_solid_layout_green.xml @@ -5,7 +5,7 @@ + android:startColor="#00A000" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_gray.xml b/app/src/main/res/drawable/bg_view_gray.xml new file mode 100644 index 0000000..4f54c88 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_gray.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_view_green.xml b/app/src/main/res/drawable/bg_view_green.xml new file mode 100644 index 0000000..db18d54 --- /dev/null +++ b/app/src/main/res/drawable/bg_view_green.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_device_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_search_result.xml b/app/src/main/res/layout/activity_device_search_result.xml index 77d9ef6..a71ad17 100644 --- a/app/src/main/res/layout/activity_device_search_result.xml +++ b/app/src/main/res/layout/activity_device_search_result.xml @@ -1,6 +1,41 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical" + tools:context=".view.DeviceSearchResultActivity"> - \ No newline at end of file + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_recycleview.xml b/app/src/main/res/layout/item_device_recycleview.xml new file mode 100644 index 0000000..a68ac1d --- /dev/null +++ b/app/src/main/res/layout/item_device_recycleview.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3c5147c..9e09837 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,7 +6,6 @@ #F7F7FA #CCCCCC #DDDDDD - #00A000 #FF0000 #FF6600 #96E9B5