diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt new file mode 100644 index 0000000..f39742f --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.utils.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 ProjectGroupViewModel : BaseViewModel() { + + private val gson = Gson() + val groupModel = MutableLiveData() + + fun obtainProGroupList() = launch({ + val response = RetrofitServiceManager.obtainProGroupList() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + groupModel.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/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt new file mode 100644 index 0000000..f39742f --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.utils.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 ProjectGroupViewModel : BaseViewModel() { + + private val gson = Gson() + val groupModel = MutableLiveData() + + fun obtainProGroupList() = launch({ + val response = RetrofitServiceManager.obtainProGroupList() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + groupModel.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/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml deleted file mode 100644 index fe027cd..0000000 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt new file mode 100644 index 0000000..f39742f --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.utils.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 ProjectGroupViewModel : BaseViewModel() { + + private val gson = Gson() + val groupModel = MutableLiveData() + + fun obtainProGroupList() = launch({ + val response = RetrofitServiceManager.obtainProGroupList() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + groupModel.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/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml deleted file mode 100644 index fe027cd..0000000 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml new file mode 100644 index 0000000..1eaba64 --- /dev/null +++ b/app/src/main/res/layout/item_alarm_rv.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt new file mode 100644 index 0000000..f39742f --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.utils.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 ProjectGroupViewModel : BaseViewModel() { + + private val gson = Gson() + val groupModel = MutableLiveData() + + fun obtainProGroupList() = launch({ + val response = RetrofitServiceManager.obtainProGroupList() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + groupModel.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/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml deleted file mode 100644 index fe027cd..0000000 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml new file mode 100644 index 0000000..1eaba64 --- /dev/null +++ b/app/src/main/res/layout/item_alarm_rv.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_recycleview.xml b/app/src/main/res/layout/item_device_recycleview.xml deleted file mode 100644 index 9a2eff8..0000000 --- a/app/src/main/res/layout/item_device_recycleview.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt new file mode 100644 index 0000000..f39742f --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.utils.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 ProjectGroupViewModel : BaseViewModel() { + + private val gson = Gson() + val groupModel = MutableLiveData() + + fun obtainProGroupList() = launch({ + val response = RetrofitServiceManager.obtainProGroupList() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + groupModel.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/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml deleted file mode 100644 index fe027cd..0000000 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml new file mode 100644 index 0000000..1eaba64 --- /dev/null +++ b/app/src/main/res/layout/item_alarm_rv.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_recycleview.xml b/app/src/main/res/layout/item_device_recycleview.xml deleted file mode 100644 index 9a2eff8..0000000 --- a/app/src/main/res/layout/item_device_recycleview.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_rv.xml b/app/src/main/res/layout/item_device_rv.xml new file mode 100644 index 0000000..9a2eff8 --- /dev/null +++ b/app/src/main/res/layout/item_device_rv.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1e8ca15..989a8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,8 @@ //高德导航(高德导航和高德地图会重复,不兼容,只能选其一) implementation 'com.amap.api:navi-3dmap:8.1.0_3dmap8.1.0' implementation 'com.amap.api:location:5.3.1' + //高德地图搜索 + implementation 'com.amap.api:search:8.1.0' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' diff --git a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt index fd9b6ab..b9e03ff 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/AlarmListAdapter.kt @@ -13,13 +13,11 @@ context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): AlarmListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_alarm_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_alarm_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt index 1cc2ed6..f613de0 100644 --- a/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt +++ b/app/src/main/java/com/casic/smarttube/adapter/DeviceListAdapter.kt @@ -14,18 +14,15 @@ import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class DeviceListAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) private var isExpand = false - override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int - ): DeviceListAdapter.ItemViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { return ItemViewHolder( - layoutInflater.inflate(R.layout.item_device_recycleview, parent, false) + layoutInflater.inflate(R.layout.item_device_rv, parent, false) ) } diff --git a/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt new file mode 100644 index 0000000..6e74091 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/adapter/GroupListAdapter.kt @@ -0,0 +1,84 @@ +package com.casic.smarttube.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.amap.api.services.core.LatLonPoint +import com.amap.api.services.geocoder.GeocodeResult +import com.amap.api.services.geocoder.GeocodeSearch +import com.amap.api.services.geocoder.RegeocodeQuery +import com.amap.api.services.geocoder.RegeocodeResult +import com.casic.smarttube.R +import com.casic.smarttube.model.ProjectGroupModel + +class GroupListAdapter( + context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private val geocoderSearch by lazy { GeocodeSearch(context) } + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + return ItemViewHolder( + layoutInflater.inflate(R.layout.item_group_rv, parent, false) + ) + } + + override fun getItemCount(): Int = dataRows.size + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + + holder.groupNameView.text = String.format("项目编号:${rowsBean.groupId}") + if (rowsBean.latGaode.isBlank() || rowsBean.lngGaode.isBlank()) { + holder.groupLocationView.text = "经纬度异常,无法查看具体位置" + } else { + val queryParam = RegeocodeQuery( + LatLonPoint(rowsBean.latGaode.toDouble(), rowsBean.lngGaode.toDouble()), + 200f, + GeocodeSearch.AMAP + ) + geocoderSearch.getFromLocationAsyn(queryParam) + geocoderSearch.setOnGeocodeSearchListener(object : + GeocodeSearch.OnGeocodeSearchListener { + override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { + if (rCode == 1000) { + holder.groupLocationView.text = result?.regeocodeAddress?.formatAddress + } + } + + override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { + + } + }) + } + holder.installDateView.text = rowsBean.installDate + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var groupNameView: TextView = view.findViewById(R.id.groupNameView) + var groupLocationView: TextView = view.findViewById(R.id.groupLocationView) + var installDateView: TextView = view.findViewById(R.id.installDateView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index b14ce32..97e6234 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -10,20 +10,28 @@ import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.smarttube.R +import com.casic.smarttube.adapter.GroupListAdapter import com.casic.smarttube.model.MapDeviceModel +import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.utils.DialogHelper import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.view.AddDeviceActivity import com.casic.smarttube.vm.DeviceViewModel +import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.GaoDeClusterMarkerView import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.pengxh.kt.lite.extensions.* +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.navigatePageTo +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.showRouteOnMap import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.fragment_home.view.* @@ -35,6 +43,9 @@ private lateinit var homeView: View private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel + private lateinit var groupViewModel: ProjectGroupViewModel + private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() /** * 所有的marker @@ -88,12 +99,16 @@ //初始化vm deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) //获取所有窨井数据 httpCountDownTimer.start() DialogHelper.showLoadingDialog(requireActivity(), "数据加载中,请稍后...") //获取所有设备数据 deviceViewModel.obtainMapDeviceList() + //获取组 + groupViewModel.obtainProGroupList() + deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { val latitudeList: MutableList = ArrayList() @@ -133,6 +148,11 @@ aMap.animateCamera(cameraUpdate, 1500, null) } }) + groupViewModel.groupModel.observe(this, { + if (it.code == 200) { + bindRecyclerView(it.data) + } + }) //地图初始化 initMap(savedInstanceState) @@ -164,6 +184,23 @@ aMap.setInfoWindowAdapter(this) } + private fun bindRecyclerView(dataBeans: MutableList) { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.layoutManager = LinearLayoutManager(requireContext()) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + + } + }) + } + override fun onMapLoaded() { //地图加载成功之后显示聚合点数据 initClustersMarkers() diff --git a/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java new file mode 100644 index 0000000..e197690 --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/model/ProjectGroupModel.java @@ -0,0 +1,109 @@ +package com.casic.smarttube.model; + +import java.util.List; + +public class ProjectGroupModel { + + private int code; + private List data; + private String message; + private String 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 String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public static class DataBean { + private String lngGaode; + private String latGaode; + private String installDate; + private String wellCode; + private String groupId; + private String deptid; + private String wellId; + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getInstallDate() { + return installDate; + } + + public void setInstallDate(String installDate) { + this.installDate = installDate; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getWellId() { + return wellId; + } + + public void setWellId(String wellId) { + this.wellId = wellId; + } + } +} diff --git a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt index 4908afb..2affba5 100644 --- a/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/smarttube/utils/LocaleConstant.kt @@ -41,8 +41,8 @@ * ============================================================================================= * */ const val USER_DETAIL_MODEL = "userDetailModel" -// const val SERVER_BASE_URL = "http://192.168.43.19:11643" - const val SERVER_BASE_URL = "http://111.198.10.15:11304" + const val SERVER_BASE_URL = "http://192.168.43.19:11643" +// const val SERVER_BASE_URL = "http://111.198.10.15:11304" const val DEFAULT_SERVER_CONFIG = "defaultServerConfig" const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt index 83cacb9..1a2057b 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitService.kt @@ -77,6 +77,12 @@ suspend fun obtainMapDeviceList(@Header("token") token: String): String /** + * 项目列表 + */ + @POST("/tube/group/list") + suspend fun obtainProGroupList(@Header("token") token: String): String + + /** * 获取管盯分页列表 * */ @GET("/device/list") diff --git a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt index 1e04ceb..982cfff 100644 --- a/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smarttube/utils/retrofit/RetrofitServiceManager.kt @@ -69,6 +69,13 @@ } /** + * 项目列表 + */ + suspend fun obtainProGroupList(): String { + return api.obtainProGroupList(AuthenticationHelper.token!!) + } + + /** * 根据设备类型获取设备分页列表 */ suspend fun obtainDeviceListByType( diff --git a/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt new file mode 100644 index 0000000..f39742f --- /dev/null +++ b/app/src/main/java/com/casic/smarttube/vm/ProjectGroupViewModel.kt @@ -0,0 +1,33 @@ +package com.casic.smarttube.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.smarttube.base.BaseApplication +import com.casic.smarttube.extensions.separateResponseCode +import com.casic.smarttube.extensions.toErrorMessage +import com.casic.smarttube.model.ProjectGroupModel +import com.casic.smarttube.utils.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 ProjectGroupViewModel : BaseViewModel() { + + private val gson = Gson() + val groupModel = MutableLiveData() + + fun obtainProGroupList() = launch({ + val response = RetrofitServiceManager.obtainProGroupList() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + groupModel.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/layout/item_alarm_recycleview.xml b/app/src/main/res/layout/item_alarm_recycleview.xml deleted file mode 100644 index fe027cd..0000000 --- a/app/src/main/res/layout/item_alarm_recycleview.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_alarm_rv.xml b/app/src/main/res/layout/item_alarm_rv.xml new file mode 100644 index 0000000..1eaba64 --- /dev/null +++ b/app/src/main/res/layout/item_alarm_rv.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_recycleview.xml b/app/src/main/res/layout/item_device_recycleview.xml deleted file mode 100644 index 9a2eff8..0000000 --- a/app/src/main/res/layout/item_device_recycleview.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_device_rv.xml b/app/src/main/res/layout/item_device_rv.xml new file mode 100644 index 0000000..9a2eff8 --- /dev/null +++ b/app/src/main/res/layout/item_device_rv.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_group_rv.xml b/app/src/main/res/layout/item_group_rv.xml new file mode 100644 index 0000000..27ab86f --- /dev/null +++ b/app/src/main/res/layout/item_group_rv.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file