diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_screen.xml b/app/src/main/res/drawable/ic_screen.xml new file mode 100644 index 0000000..f297bab --- /dev/null +++ b/app/src/main/res/drawable/ic_screen.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_screen.xml b/app/src/main/res/drawable/ic_screen.xml new file mode 100644 index 0000000..f297bab --- /dev/null +++ b/app/src/main/res/drawable/ic_screen.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml index e358e9e..83374d6 100644 --- a/app/src/main/res/layout/activity_data_search.xml +++ b/app/src/main/res/layout/activity_data_search.xml @@ -28,7 +28,7 @@ android:layout_height="match_parent" android:layout_alignParentEnd="true" android:paddingHorizontal="@dimen/dp_10" - android:src="@drawable/ic_calendar" /> + android:src="@drawable/ic_screen" /> diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_screen.xml b/app/src/main/res/drawable/ic_screen.xml new file mode 100644 index 0000000..f297bab --- /dev/null +++ b/app/src/main/res/drawable/ic_screen.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml index e358e9e..83374d6 100644 --- a/app/src/main/res/layout/activity_data_search.xml +++ b/app/src/main/res/layout/activity_data_search.xml @@ -28,7 +28,7 @@ android:layout_height="match_parent" android:layout_alignParentEnd="true" android:paddingHorizontal="@dimen/dp_10" - android:src="@drawable/ic_calendar" /> + android:src="@drawable/ic_screen" /> diff --git a/app/src/main/res/layout/include_data_excel.xml b/app/src/main/res/layout/include_data_excel.xml new file mode 100644 index 0000000..5803bdb --- /dev/null +++ b/app/src/main/res/layout/include_data_excel.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_screen.xml b/app/src/main/res/drawable/ic_screen.xml new file mode 100644 index 0000000..f297bab --- /dev/null +++ b/app/src/main/res/drawable/ic_screen.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml index e358e9e..83374d6 100644 --- a/app/src/main/res/layout/activity_data_search.xml +++ b/app/src/main/res/layout/activity_data_search.xml @@ -28,7 +28,7 @@ android:layout_height="match_parent" android:layout_alignParentEnd="true" android:paddingHorizontal="@dimen/dp_10" - android:src="@drawable/ic_calendar" /> + android:src="@drawable/ic_screen" /> diff --git a/app/src/main/res/layout/include_data_excel.xml b/app/src/main/res/layout/include_data_excel.xml new file mode 100644 index 0000000..5803bdb --- /dev/null +++ b/app/src/main/res/layout/include_data_excel.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml index 8771a58..caecf87 100644 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ b/app/src/main/res/layout/item_alarm_recycleview.xml @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:text="@string/app_name" android:textColor="@color/subTextColor" - android:textSize="@dimen/textFontSize" /> + android:textSize="@dimen/miniFontSize" /> + android:textSize="@dimen/miniFontSize" /> diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_screen.xml b/app/src/main/res/drawable/ic_screen.xml new file mode 100644 index 0000000..f297bab --- /dev/null +++ b/app/src/main/res/drawable/ic_screen.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml index e358e9e..83374d6 100644 --- a/app/src/main/res/layout/activity_data_search.xml +++ b/app/src/main/res/layout/activity_data_search.xml @@ -28,7 +28,7 @@ android:layout_height="match_parent" android:layout_alignParentEnd="true" android:paddingHorizontal="@dimen/dp_10" - android:src="@drawable/ic_calendar" /> + android:src="@drawable/ic_screen" /> diff --git a/app/src/main/res/layout/include_data_excel.xml b/app/src/main/res/layout/include_data_excel.xml new file mode 100644 index 0000000..5803bdb --- /dev/null +++ b/app/src/main/res/layout/include_data_excel.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml index 8771a58..caecf87 100644 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ b/app/src/main/res/layout/item_alarm_recycleview.xml @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:text="@string/app_name" android:textColor="@color/subTextColor" - android:textSize="@dimen/textFontSize" /> + android:textSize="@dimen/miniFontSize" /> + android:textSize="@dimen/miniFontSize" /> diff --git a/app/src/main/res/layout/item_device_data_recycleview.xml b/app/src/main/res/layout/item_device_data_recycleview.xml new file mode 100644 index 0000000..d51c100 --- /dev/null +++ b/app/src/main/res/layout/item_device_data_recycleview.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt index 8720afe..7efe048 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/AlarmListAdapter.kt @@ -38,7 +38,7 @@ } holder.wellCodeView.text = rowsBean.wellCode holder.devCodeView.text = rowsBean.devcode - holder.wellLocationView.text = rowsBean.position + holder.wellLocationView.text = String.format("位置:${rowsBean.position}") holder.createTimeView.text = rowsBean.alarmTime //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt new file mode 100644 index 0000000..a4e6526 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceDataListAdapter.kt @@ -0,0 +1,76 @@ +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.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.model.DeviceDataModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class DeviceDataListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): DeviceDataListAdapter.ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_device_data_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}") + holder.devLocationView.text = String.format("位置:${rowsBean.position}") + holder.watchDataView.text = rowsBean.watchNum + holder.dayDataView.text = rowsBean.dayCount + holder.monthDataView.text = rowsBean.monthCount + holder.totalDataView.text = rowsBean.totalCount + if (rowsBean.deviceType == "13") { + holder.dataUnitView.text = String.format("单位:立方米(m³)") + } else { + holder.dataUnitView.text = "单位:未知" + } + holder.dataCollectTimeView.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 wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var watchDataView: TextView = view.findViewById(R.id.watchDataView) + var dayDataView: TextView = view.findViewById(R.id.dayDataView) + var monthDataView: TextView = view.findViewById(R.id.monthDataView) + var totalDataView: TextView = view.findViewById(R.id.totalDataView) + var devLocationView: TextView = view.findViewById(R.id.devLocationView) + var dataCollectTimeView: TextView = view.findViewById(R.id.dataCollectTimeView) + var dataUnitView: TextView = view.findViewById(R.id.dataUnitView) + } + + 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/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt index be20872..2f0fc64 100644 --- a/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/qd/smartwell/adapter/DeviceListAdapter.kt @@ -38,7 +38,7 @@ } else { holder.deviceStateView.setBackgroundResource(R.drawable.bg_view_gray) } - holder.devLocationView.text = rowsBean.position + holder.devLocationView.text = String.format("位置:${rowsBean.position}") holder.devInstallTimeView.text = String.format("安装日期:${rowsBean.installDate}") //绑定事件 if (listener != null) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt index d2ac7cf..e038aec 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun BarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt index e67f075..14037df 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/HorizontalBarChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun HorizontalBarChart.init(barLabels: MutableList) { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt index 25f238f..16b00d5 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt @@ -11,7 +11,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun LineChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt index 3497dc7..173d050 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt @@ -10,7 +10,7 @@ import com.pengxh.app.multilib.utils.SizeUtil fun PieChart.init() { - this.setNoDataText("数据渲染中,请稍后...") + this.setNoDataText("无数据,无法渲染...") this.setNoDataTextColor(R.color.orangeTextColor) this.getPaint(Chart.PAINT_INFO).textSize = SizeUtil.dp2px(BaseApplication.obtainInstance(), 14f).toFloat() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt new file mode 100644 index 0000000..4e4fcf6 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DeviceDataModel.kt @@ -0,0 +1,49 @@ +package com.casic.qd.smartwell.model + +class DeviceDataModel { + 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 0c80ee9..06fadd2 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 @@ -224,4 +224,16 @@ @Query("beginTime") beginTime: String?, @Query("endTime") endTime: String? ): String + + /** + * 所有用水数据记录 + * */ + @GET("/waterMeterData/listPage") + suspend fun obtainDeviceData( + @Header("token") token: String, + @Query("areaId") devCode: String?, + @Query("keywords") beginTime: 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 a8b320f..29dc335 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 @@ -218,4 +218,13 @@ suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) } + + /** + * 所有用水数据记录 + */ + suspend fun obtainDeviceData(areaId: String?, keywords: String?, page: Int): String { + return api.obtainDeviceData( + AuthenticationHelper.token!!, areaId, keywords, page, Constant.PAGE_LIMIT + ) + } } \ 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 dcacf68..d440ea4 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 @@ -112,31 +112,33 @@ 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 - ) + if (msg.what == 2022042001) { + 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 + ) + } + }) + } } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt index e6a38e4..513ea50 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -1,8 +1,25 @@ 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.DeviceDataListAdapter import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.showEmptyPage +import com.casic.qd.smartwell.model.DeviceDataModel +import com.casic.qd.smartwell.utils.DialogHelper +import com.casic.qd.smartwell.utils.LoadState +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import kotlinx.android.synthetic.main.activity_data_search.* +import kotlinx.android.synthetic.main.include_base_title.titleView +import kotlinx.android.synthetic.main.include_empty_view.* +import java.lang.ref.WeakReference /** * @author a203 @@ -12,14 +29,15 @@ */ class SearchDataActivity : BaseActivity() { -// 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 = "" -// private var areaId = "" + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var areaViewModel: AreaViewModel + private lateinit var dataListAdapter: DeviceDataListAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var areaId = "" override fun initLayoutView(): Int = R.layout.activity_data_search @@ -28,89 +46,63 @@ } override fun initData() { -// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String -// if (userDeviceJson.isNotBlank()) { -// authenticatedType = Gson().fromJson( -// userDeviceJson, object : TypeToken>() {}.type -// ) -// } -// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) -// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) -// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) } override fun initEvent() { -// deviceTypeView.setOnClickListener { -// /** -// * 获取全部设备类型 -// * */ -// deviceViewModel.obtainDeviceType() -// } -// deviceViewModel.typeModel.observe(this, { -// if (it.code == 200) { -// val authenticatedModel: MutableList = ArrayList() -// it.data?.forEach { deviceModel -> -// if (deviceModel.value in authenticatedType) { -// authenticatedModel.add(deviceModel) -// } -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("设备类型") -// authenticatedModel.forEach { deviceModel -> -// sheetBuilder.addItem(deviceModel.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// deviceTypeView.text = tag -// this.deviceTypeValue = authenticatedModel[position].value.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// ownerShipView.setOnClickListener { -// authenticateViewModel.obtainOwnerShip("03") -// } -// authenticateViewModel.resultModel.observe(this, { -// if (it.code == 200) { -// val ownerShipModel: MutableList = ArrayList() -// it.data?.list?.forEach { listBean -> -// ownerShipModel.add(listBean) -// } -// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) -// sheetBuilder.setTitle("权属单位") -// ownerShipModel.forEach { model -> -// sheetBuilder.addItem(model.name) -// } -// sheetBuilder.setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, position, tag -> -// ownerShipView.text = tag -// this.deptId = ownerShipModel[position].id.toString() -// -// dialog.dismiss() -// }.build().show() -// } -// }) -// -// deviceStateView.setOnClickListener { -// QMUIBottomSheet.BottomListSheetBuilder(this) -// .setTitle("在线情况") -// .addItem("在线") -// .addItem("离线") -// .setGravityCenter(true) -// .setOnSheetItemClickListener { dialog, _, _, tag -> -// deviceStateView.text = tag -// this.deviceState = if (tag == "在线") { -// "1" -// } else { -// "0" -// } -// -// dialog.dismiss() -// }.build().show() -// } -// + //默认加载所有数据 + obtainSearchResult(areaId, "", pageIndex) + deviceViewModel.deviceDataModel.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(2022042101) + } + }) + + deviceViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + resultRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainSearchResult(areaId, "", pageIndex) + } + resultRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainSearchResult(areaId, "", pageIndex) + } + // areaView.setOnClickListener { // areaViewModel.obtainArea() // } @@ -165,4 +157,36 @@ // areaView.text = "" // } } + + private fun obtainSearchResult(areaId: String?, keywords: String?, pageIndex: Int) { + deviceViewModel.obtainDeviceData(areaId, keywords, pageIndex) + } + + private class WeakReferenceHandler(activity: SearchDataActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022042101) { + if (activity.isRefresh || activity.isLoadMore) { + activity.dataListAdapter.notifyDataSetChanged() + } else { + if (activity.dataBeans.size == 0) { + activity.emptyView!!.showEmptyPage { + activity.obtainSearchResult(activity.areaId, "", activity.pageIndex) + } + } else { + activity.emptyView!!.hide() + activity.dataListAdapter = + DeviceDataListAdapter(activity, activity.dataBeans) + activity.resultRecyclerView!!.layoutManager = LinearLayoutManager(activity) + activity.resultRecyclerView!!.adapter = activity.dataListAdapter + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 9448ade..fbf67ba 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,10 +7,8 @@ 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.DayDataModel -import com.casic.qd.smartwell.model.DeviceStatisticsModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.TotalDataModel +import com.casic.qd.smartwell.model.* +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 @@ -23,6 +21,7 @@ val typeModel = MutableLiveData() val dayDataModel = MutableLiveData() val totalDataModel = MutableLiveData() + val deviceDataModel = MutableLiveData() /** * 管网资产统计 @@ -95,4 +94,26 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 所有设备数据记录 + * */ + fun obtainDeviceData(areaId: String?, keywords: String?, page: Int) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.obtainDeviceData(areaId, keywords, page) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + deviceDataModel.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_stroke_layout_gray.xml b/app/src/main/res/drawable/bg_stroke_layout_gray.xml new file mode 100644 index 0000000..cce49f6 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_screen.xml b/app/src/main/res/drawable/ic_screen.xml new file mode 100644 index 0000000..f297bab --- /dev/null +++ b/app/src/main/res/drawable/ic_screen.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml index e358e9e..83374d6 100644 --- a/app/src/main/res/layout/activity_data_search.xml +++ b/app/src/main/res/layout/activity_data_search.xml @@ -28,7 +28,7 @@ android:layout_height="match_parent" android:layout_alignParentEnd="true" android:paddingHorizontal="@dimen/dp_10" - android:src="@drawable/ic_calendar" /> + android:src="@drawable/ic_screen" /> diff --git a/app/src/main/res/layout/include_data_excel.xml b/app/src/main/res/layout/include_data_excel.xml new file mode 100644 index 0000000..5803bdb --- /dev/null +++ b/app/src/main/res/layout/include_data_excel.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml index 8771a58..caecf87 100644 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ b/app/src/main/res/layout/item_alarm_recycleview.xml @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:text="@string/app_name" android:textColor="@color/subTextColor" - android:textSize="@dimen/textFontSize" /> + android:textSize="@dimen/miniFontSize" /> + android:textSize="@dimen/miniFontSize" /> diff --git a/app/src/main/res/layout/item_device_data_recycleview.xml b/app/src/main/res/layout/item_device_data_recycleview.xml new file mode 100644 index 0000000..d51c100 --- /dev/null +++ b/app/src/main/res/layout/item_device_data_recycleview.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + \ 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 index a68ac1d..41b3492 100644 --- a/app/src/main/res/layout/item_device_recycleview.xml +++ b/app/src/main/res/layout/item_device_recycleview.xml @@ -52,7 +52,7 @@ android:layout_marginTop="@dimen/dp_5" android:text="WG0001" android:textColor="@color/subTextColor" - android:textSize="@dimen/textFontSize" /> + android:textSize="@dimen/miniFontSize" />