diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 410444b..0d9cfc7 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -15,6 +15,14 @@ RetrofitFactory.createRetrofit(defaultValue) } + private val smartTownApi by lazy { + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.SMART_TOWN_SERVER_CONFIG, + LocaleConstant.SMART_TOWN_SERVER + ) as String + RetrofitFactory.createRetrofit(defaultValue) + } + /** * 验证PublicKey */ @@ -64,4 +72,11 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + suspend fun countInfrastructure(): String { + return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) + } + + suspend fun countDevice(): String { + return smartTownApi.countDevice(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 410444b..0d9cfc7 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -15,6 +15,14 @@ RetrofitFactory.createRetrofit(defaultValue) } + private val smartTownApi by lazy { + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.SMART_TOWN_SERVER_CONFIG, + LocaleConstant.SMART_TOWN_SERVER + ) as String + RetrofitFactory.createRetrofit(defaultValue) + } + /** * 验证PublicKey */ @@ -64,4 +72,11 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + suspend fun countInfrastructure(): String { + return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) + } + + suspend fun countDevice(): String { + return smartTownApi.countDevice(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt new file mode 100644 index 0000000..37f1268 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.DeviceModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countDevice() = launch({ + val response = RetrofitServiceManager.countDevice() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 410444b..0d9cfc7 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -15,6 +15,14 @@ RetrofitFactory.createRetrofit(defaultValue) } + private val smartTownApi by lazy { + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.SMART_TOWN_SERVER_CONFIG, + LocaleConstant.SMART_TOWN_SERVER + ) as String + RetrofitFactory.createRetrofit(defaultValue) + } + /** * 验证PublicKey */ @@ -64,4 +72,11 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + suspend fun countInfrastructure(): String { + return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) + } + + suspend fun countDevice(): String { + return smartTownApi.countDevice(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt new file mode 100644 index 0000000..37f1268 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.DeviceModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countDevice() = launch({ + val response = RetrofitServiceManager.countDevice() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt new file mode 100644 index 0000000..0f72b29 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.InfrastructureModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class InfrastructureViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countInfrastructure() = launch({ + val response = RetrofitServiceManager.countInfrastructure() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 410444b..0d9cfc7 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -15,6 +15,14 @@ RetrofitFactory.createRetrofit(defaultValue) } + private val smartTownApi by lazy { + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.SMART_TOWN_SERVER_CONFIG, + LocaleConstant.SMART_TOWN_SERVER + ) as String + RetrofitFactory.createRetrofit(defaultValue) + } + /** * 验证PublicKey */ @@ -64,4 +72,11 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + suspend fun countInfrastructure(): String { + return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) + } + + suspend fun countDevice(): String { + return smartTownApi.countDevice(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt new file mode 100644 index 0000000..37f1268 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.DeviceModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countDevice() = launch({ + val response = RetrofitServiceManager.countDevice() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt new file mode 100644 index 0000000..0f72b29 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.InfrastructureModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class InfrastructureViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countInfrastructure() = launch({ + val response = RetrofitServiceManager.countInfrastructure() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..8c88130 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt new file mode 100644 index 0000000..4f86f23 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/DeviceRecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.DeviceModel + +class DeviceRecyclerAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 410444b..0d9cfc7 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -15,6 +15,14 @@ RetrofitFactory.createRetrofit(defaultValue) } + private val smartTownApi by lazy { + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.SMART_TOWN_SERVER_CONFIG, + LocaleConstant.SMART_TOWN_SERVER + ) as String + RetrofitFactory.createRetrofit(defaultValue) + } + /** * 验证PublicKey */ @@ -64,4 +72,11 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + suspend fun countInfrastructure(): String { + return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) + } + + suspend fun countDevice(): String { + return smartTownApi.countDevice(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt new file mode 100644 index 0000000..37f1268 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.DeviceModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countDevice() = launch({ + val response = RetrofitServiceManager.countDevice() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt new file mode 100644 index 0000000..0f72b29 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.InfrastructureModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class InfrastructureViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countInfrastructure() = launch({ + val response = RetrofitServiceManager.countInfrastructure() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..8c88130 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 0ce1ac3..ece2b60 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -14,7 +14,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" - android:src="@mipmap/splash_text" /> + android:src="@mipmap/splash_text" + android:visibility="invisible" /> +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_device_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.onLineStateView.text = dataModel.onLineState + holder.offLineStateView.text = dataModel.offLineState + holder.deviceTypeView.text = dataModel.deviceType + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val onLineStateView: TextView = itemView.findViewById(R.id.onLineStateView) + val offLineStateView: TextView = itemView.findViewById(R.id.offLineStateView) + val deviceTypeView: TextView = itemView.findViewById(R.id.deviceTypeView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt new file mode 100644 index 0000000..2ec96d3 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/adapter/InfrastructureAdapter.kt @@ -0,0 +1,35 @@ +package com.casic.smart.town.sanxi.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.model.InfrastructureModel + +class InfrastructureAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_statistics_infrastructure_rv_g, parent, false) + ) + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + val dataModel = dataRows[position] + + holder.facilitiesQuantityView.text = dataModel.facilitiesQuantity.toString() + holder.facilitiesNameView.text = dataModel.facilitiesName + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val facilitiesQuantityView: TextView = itemView.findViewById(R.id.facilitiesQuantityView) + val facilitiesNameView: TextView = itemView.findViewById(R.id.facilitiesNameView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt index 31c6fb3..03562d4 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/MorePageFragment.kt @@ -144,7 +144,7 @@ }.start() } - loginOutButton.setOnClickListener { + loginOutView.setOnClickListener { AlertControlDialog.Builder() .setContext(requireContext()) .setTitle("退出登录") diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt index 21924de..2282b58 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt @@ -1,20 +1,26 @@ package com.casic.smart.town.sanxi.fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration import com.casic.smart.town.sanxi.R +import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter +import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter +import com.casic.smart.town.sanxi.model.DeviceModel import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity +import com.casic.smart.town.sanxi.vm.DeviceViewModel +import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.WellViewModel -import com.google.android.material.bottomsheet.BottomSheetBehavior import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import kotlinx.android.synthetic.main.fragment_statistics.* class StatisticsPageFragment : KotlinBaseFragment() { private lateinit var wellViewModel: WellViewModel + private lateinit var infrastructureViewModel: InfrastructureViewModel + private lateinit var deviceViewModel: DeviceViewModel override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -27,23 +33,24 @@ } override fun initData() { - //代码设置底部拉升距离 - val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout) - coordinatorLayout.post { - bottomSheetBehavior.isFitToContents = false - bottomSheetBehavior.halfExpandedRatio = 0.25f - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext()) - } - //初始化vm wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] + deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] //获取窨井监控数据 wellViewModel.countResultModel.observe(this, { cfWellView.text = it["cfWell"] bfWellView.text = it["bfWell"] allWellDataView.text = it["total"] }) + + infrastructureViewModel.countInfrastructure() + infrastructureViewModel.resultModel.observe(this, { + if (it.code == 200) { + infrastructureRecyclerView.adapter = + InfrastructureAdapter(requireContext(), it.data) + } + }) } override fun initEvent() { @@ -62,7 +69,23 @@ override fun onResume() { super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 + //每次页面切换都需要重新刷新不同状态的闸井数量 wellViewModel.countWellByState() + + deviceViewModel.countDevice() + deviceViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dateRows = ArrayList() + it.data.forEach { data -> + if (data.offLineState != "0" || data.onLineState != "0") { + dateRows.add(data) + } + } + deviceRecyclerView.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + deviceRecyclerView.adapter = DeviceRecyclerAdapter(requireContext(), dateRows) + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java new file mode 100644 index 0000000..ad82926 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/DeviceModel.java @@ -0,0 +1,73 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class DeviceModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String deviceType; + private String offLineState; + private String onLineState; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getOffLineState() { + return offLineState; + } + + public void setOffLineState(String offLineState) { + this.offLineState = offLineState; + } + + public String getOnLineState() { + return onLineState; + } + + public void setOnLineState(String onLineState) { + this.onLineState = onLineState; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java new file mode 100644 index 0000000..ad14ce6 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/InfrastructureModel.java @@ -0,0 +1,64 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class InfrastructureModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int facilitiesQuantity; + private String facilitiesName; + + public int getFacilitiesQuantity() { + return facilitiesQuantity; + } + + public void setFacilitiesQuantity(int facilitiesQuantity) { + this.facilitiesQuantity = facilitiesQuantity; + } + + public String getFacilitiesName() { + return facilitiesName; + } + + public void setFacilitiesName(String facilitiesName) { + this.facilitiesName = facilitiesName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt index 40665a0..57bb3aa 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt @@ -16,6 +16,8 @@ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val DEFAULT_SERVER = "http://36.133.189.112:8082" + const val SMART_TOWN_SERVER_CONFIG = "smartTownServerConfig" + const val SMART_TOWN_SERVER = "http://111.198.10.15:21406" const val APP_AUTHORITY = "com.casic.smart.town.sanxi.fileprovider" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 50d1742..5b814d3 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -61,4 +61,16 @@ */ @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): String + + /** + * 各类基础设施数量 + * */ + @GET("/statics/facilitiesStaticsByType") + suspend fun countInfrastructure(@Header("token") token: String): String + + /** + * 根据设备类型统计设备数量 + * */ + @GET("/statics/deviceStaticsByType") + suspend fun countDevice(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index 410444b..0d9cfc7 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -15,6 +15,14 @@ RetrofitFactory.createRetrofit(defaultValue) } + private val smartTownApi by lazy { + val defaultValue = SaveKeyValues.getValue( + LocaleConstant.SMART_TOWN_SERVER_CONFIG, + LocaleConstant.SMART_TOWN_SERVER + ) as String + RetrofitFactory.createRetrofit(defaultValue) + } + /** * 验证PublicKey */ @@ -64,4 +72,11 @@ return api.obtainVersionResult(AuthenticationHelper.token!!) } + suspend fun countInfrastructure(): String { + return smartTownApi.countInfrastructure(AuthenticationHelper.token!!) + } + + suspend fun countDevice(): String { + return smartTownApi.countDevice(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt new file mode 100644 index 0000000..37f1268 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/DeviceViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.DeviceModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class DeviceViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countDevice() = launch({ + val response = RetrofitServiceManager.countDevice() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt new file mode 100644 index 0000000..0f72b29 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/InfrastructureViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smart.town.sanxi.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smart.town.sanxi.base.BaseApplication +import com.casic.smart.town.sanxi.extensions.separateResponseCode +import com.casic.smart.town.sanxi.extensions.toErrorMessage +import com.casic.smart.town.sanxi.model.InfrastructureModel +import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.vm.BaseViewModel + +class InfrastructureViewModel : BaseViewModel() { + + private val gson by lazy { Gson() } + val resultModel = MutableLiveData() + + fun countInfrastructure() = launch({ + val response = RetrofitServiceManager.countInfrastructure() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + resultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..8c88130 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 0ce1ac3..ece2b60 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -14,7 +14,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" - android:src="@mipmap/splash_text" /> + android:src="@mipmap/splash_text" + android:visibility="invisible" /> - + android:background="@color/mainThemeColor"> + + + + + - - - -