diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_route.xml b/app/src/main/res/layout/activity_inspect_route.xml new file mode 100644 index 0000000..4af9b53 --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_route.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_route.xml b/app/src/main/res/layout/activity_inspect_route.xml new file mode 100644 index 0000000..4af9b53 --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_route.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index bcae777..30b2e5e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -74,6 +74,7 @@ android:textColor="@color/white" android:textSize="@dimen/titleFontSize" app:qmui_backgroundColor="@color/mainThemeColor" + app:qmui_borderColor="@color/mainThemeColor" app:qmui_radius="20dp" /> + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_route.xml b/app/src/main/res/layout/activity_inspect_route.xml new file mode 100644 index 0000000..4af9b53 --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_route.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index bcae777..30b2e5e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -74,6 +74,7 @@ android:textColor="@color/white" android:textSize="@dimen/titleFontSize" app:qmui_backgroundColor="@color/mainThemeColor" + app:qmui_borderColor="@color/mainThemeColor" app:qmui_radius="20dp" /> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_route.xml b/app/src/main/res/layout/activity_inspect_route.xml new file mode 100644 index 0000000..4af9b53 --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_route.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index bcae777..30b2e5e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -74,6 +74,7 @@ android:textColor="@color/white" android:textSize="@dimen/titleFontSize" app:qmui_backgroundColor="@color/mainThemeColor" + app:qmui_borderColor="@color/mainThemeColor" app:qmui_radius="20dp" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/jingshi.png b/app/src/main/res/mipmap-xxhdpi/jingshi.png new file mode 100644 index 0000000..f567df5 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/jingshi.png Binary files differ diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_route.xml b/app/src/main/res/layout/activity_inspect_route.xml new file mode 100644 index 0000000..4af9b53 --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_route.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index bcae777..30b2e5e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -74,6 +74,7 @@ android:textColor="@color/white" android:textSize="@dimen/titleFontSize" app:qmui_backgroundColor="@color/mainThemeColor" + app:qmui_borderColor="@color/mainThemeColor" app:qmui_radius="20dp" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/jingshi.png b/app/src/main/res/mipmap-xxhdpi/jingshi.png new file mode 100644 index 0000000..f567df5 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/jingshi.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/qidian.png b/app/src/main/res/mipmap-xxhdpi/qidian.png new file mode 100644 index 0000000..94290c6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/qidian.png Binary files differ diff --git a/app/build.gradle b/app/build.gradle index bf4de11..6f072bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,10 @@ targetSdkVersion 30 versionCode 1 versionName "v2.0.0.0" + ndk { + //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + } } buildTypes { @@ -74,4 +78,7 @@ implementation 'com.github.bumptech.glide:glide:4.9.0' //图片选择框架 implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' + //高德地图 + implementation 'com.amap.api:map2d:6.0.0' + implementation 'com.amap.api:location:5.3.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c3455d..7949d16 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,9 @@ + + + - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt index 7520133..f9da879 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventListAdapter.kt @@ -8,15 +8,17 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.model.EventModel +import com.casic.birmm.inspect.model.TaskRecordModel - +/** + * 根据id获取事件列表 + * */ class EventListAdapter( context: Context, - dataRows: MutableList + dataRows: List ) : RecyclerView.Adapter() { - private val dataRows: MutableList? = dataRows + private val dataRows: List? = dataRows private var layoutInflater: LayoutInflater? = null init { diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt new file mode 100644 index 0000000..c98d39e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/EventSearchListAdapter.kt @@ -0,0 +1,66 @@ +package com.casic.birmm.inspect.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.EventModel + +/** + * 事件查询 + * */ +class EventSearchListAdapter( + context: Context, + dataRows: MutableList +) : RecyclerView.Adapter() { + + private val dataRows: MutableList? = dataRows + private var layoutInflater: LayoutInflater? = null + + init { + layoutInflater = LayoutInflater.from(context) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater!!.inflate(R.layout.item_inspect_recycleview, parent, false) + return ItemViewHolder(view) + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows?.get(position)!! + holder.inspectMessageView.text = rowsBean.name + " - " + rowsBean.type + holder.inspectDateView.text = rowsBean.createTime + holder.inspectNameView.text = rowsBean.user + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClick(position) + } + } + } + + override fun getItemCount(): Int = dataRows!!.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var inspectMessageView: TextView = view.findViewById(R.id.inspectMessageView) + var inspectDateView: TextView = view.findViewById(R.id.inspectDateView) + var inspectNameView: TextView = view.findViewById(R.id.inspectNameView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClick(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt index 3efd655..aff92d4 100644 --- a/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/ImageRecycleViewAdapter.kt @@ -18,13 +18,9 @@ return ItemViewHolder(view) } - override fun getItemCount(): Int { - return images.size - } + override fun getItemCount(): Int = images.size - override fun getItemId(position: Int): Long { - return position.toLong() - } + override fun getItemId(position: Int): Long = position.toLong() override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { Glide.with(context) diff --git a/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt new file mode 100644 index 0000000..c78353e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/InspectDetailModel.kt @@ -0,0 +1,35 @@ +package com.casic.birmm.inspect.model + +class InspectDetailModel { + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + /** + * date : 2021年07月08日 + * endLat : 39.915908 + * endLng : 116.26876 + * endTime : 2021-07-08 11:20:20 + * id : 162570318141612121 + * name : 测试 + * routes : [[116.2694615342882,39.913364800347225],[116.26944390190972,39.913723415798614],[116.2694420030382,39.91406846788195],[116.26944363064236,39.91439860026042],[116.268654,39.915826],[116.268759765625,39.91590766059028]] + * startLat : 39.913365 + * startLng : 116.269462 + * startTime : 2021-07-08 08:13:01 + * user : 王晓颖 + */ + var date: String? = null + var endLat = 0.0 + var endLng = 0.0 + var endTime: String? = null + var id: String? = null + var name: String? = null + var routes: String? = null + var startLat = 0.0 + var startLng = 0.0 + var startTime: String? = null + var user: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt new file mode 100644 index 0000000..ee6f1f6 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/TaskRecordModel.kt @@ -0,0 +1,40 @@ +package com.casic.birmm.inspect.model + +class TaskRecordModel { + + var code = 0 + var data: DataBean? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var list: List? = null + + class ListBean { + /** + * createTime : 2020-12-28 14:56:59 + * data : -1 + * description : ggg + * id : t1609138629320112121 + * images : 2020-12/6528aeb21cff426c91c43a7f8b716d1e.jpg + * inspectionId : 1609138451543200022 + * lat : 39.915956 + * lng : 116.268596 + * name : sss + * type : 自定义事件 + * user : 超超级管理员 + */ + var createTime: String? = null + var data = 0 + var description: String? = null + var id: String? = null + var images: String? = null + var inspectionId: String? = null + var lat = 0.0 + var lng = 0.0 + var name: String? = null + var type: String? = null + var user: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt index c27772f..0ae38db 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/Constant.kt @@ -6,7 +6,9 @@ object Constant { val USER_PERMISSIONS = arrayOf( Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION + Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE ) const val PERMISSIONS_CODE = 999 diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt index ce426a3..36b219f 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt @@ -4,7 +4,7 @@ import retrofit2.http.* /** - * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符? + * @JvmSuppressWildcards 用来注解类和方法,使得被标记元素的泛型参数不会被编译成通配符 * */ @JvmSuppressWildcards interface RetrofitService { @@ -61,4 +61,22 @@ @Query("limit") limit: Int, @Query("offset") offset: Int ): EventModel + + /** + * 获取巡检详情 + */ + @GET("/inspection/info") + suspend fun obtainInspectDetail( + @Header("token") token: String, + @Query("id") id: String + ): InspectDetailModel + + /** + * 查询巡检记录对应的事件记录 + */ + @GET("/task/searchByInspection") + suspend fun searchByInspection( + @Header("token") token: String, + @Query("inspectionId") inspectionId: String + ): TaskRecordModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt index 673ce3d..23ed09d 100644 --- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt @@ -74,4 +74,18 @@ pageIndex ) } + + /** + * 获取巡检详情 + */ + suspend fun getInspectDetail(id: String): InspectDetailModel { + return api.obtainInspectDetail(AuthenticationHelper.token!!, id) + } + + /** + * 查询巡检记录对应的事件记录 + */ + suspend fun searchByInspection(inspectionId: String): TaskRecordModel { + return api.searchByInspection(AuthenticationHelper.token!!, inspectionId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt new file mode 100644 index 0000000..7456901 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventListActivity.kt @@ -0,0 +1,70 @@ +package com.casic.birmm.inspect.view + +import android.content.Intent +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.base.BaseViewModelActivity +import com.casic.birmm.inspect.extensions.filterString +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import kotlinx.android.synthetic.main.activity_event_list.* +import kotlinx.android.synthetic.main.include_base_title.* + +class EventListActivity : BaseViewModelActivity() { + override fun createViewModelByClass(): Class? = + TaskRecordViewModel::class.java + + override fun initLayoutView(): Int = R.layout.activity_event_list + + override fun setupTopBarLayout() { + PageNavigationManager.addActivity(this) + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "事件清单" + } + + override fun initData() { + val id = intent.getStringExtra("id")!! + viewModel.searchByInspection(id) + viewModel.resultModel.observe(this, Observer { + if (it.code == 200) { + if (it.data!!.list!!.isEmpty()) { + "抱歉,无法查询到相关记录".show(this) + } else { + val eventAdapter = EventListAdapter(this, it.data!!.list!!) + eventRecyclerView!!.layoutManager = LinearLayoutManager(this) + eventRecyclerView.adapter = eventAdapter + eventAdapter.setOnItemClickListener(object : + EventListAdapter.OnItemClickListener { + override fun onClick(position: Int) { + val intent = + Intent(this@EventListActivity, EventDetailActivity::class.java) + val listBean = it.data!!.list!![position] + intent.putExtra("createTime", listBean.createTime) + intent.putExtra( + "description", + listBean.description!!.filterString() + ) + intent.putExtra("data", listBean.data) + intent.putExtra("images", listBean.images) + startActivity(intent) + } + }) + } + } + }) + viewModel.loadState.observe(this, Observer { + "未知异常,暂时无法查看清单".show(this) + }) + } + + override fun initEvent() { + leftBackView.setOnClickListener { this.finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt index 3d2eb8f..12c7c7e 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/EventQueryActivity.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.EventListAdapter +import com.casic.birmm.inspect.adapter.EventSearchListAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.show @@ -40,7 +40,7 @@ private var isLoadMore = false private var dataBeans: MutableList = ArrayList() private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var adapter: EventListAdapter + private lateinit var adapter: EventSearchListAdapter override fun createViewModelByClass(): Class? = EventQueryViewModel::class.java @@ -157,12 +157,12 @@ } else { resultActivity.emptyView!!.hide() resultActivity.adapter = - EventListAdapter(resultActivity, resultActivity.dataBeans) + EventSearchListAdapter(resultActivity, resultActivity.dataBeans) resultActivity.eventRecyclerView!!.layoutManager = LinearLayoutManager(resultActivity) resultActivity.eventRecyclerView!!.adapter = resultActivity.adapter resultActivity.adapter.setOnItemClickListener(object : - EventListAdapter.OnItemClickListener { + EventSearchListAdapter.OnItemClickListener { override fun onClick(position: Int) { val intent = Intent(resultActivity, EventDetailActivity::class.java) val rowsBean = resultActivity.dataBeans[position] diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt index d805b9d..b9fe368 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectRouteActivity.kt @@ -1,4 +1,156 @@ package com.casic.birmm.inspect.view -class InspectRouteActivity { +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps2d.AMap +import com.amap.api.maps2d.AMapOptions +import com.amap.api.maps2d.CameraUpdateFactory +import com.amap.api.maps2d.model.BitmapDescriptorFactory +import com.amap.api.maps2d.model.LatLng +import com.amap.api.maps2d.model.MarkerOptions +import com.amap.api.maps2d.model.PolylineOptions +import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.extensions.show +import com.casic.birmm.inspect.utils.OtherUtils +import com.casic.birmm.inspect.utils.PageNavigationManager +import com.casic.birmm.inspect.utils.StatusBarColorUtil +import com.casic.birmm.inspect.vm.InspectDetailViewModel +import com.casic.birmm.inspect.vm.TaskRecordViewModel +import com.gyf.immersionbar.ImmersionBar +import com.qmuiteam.qmui.util.QMUIStatusBarHelper +import kotlinx.android.synthetic.main.activity_inspect_route.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class InspectRouteActivity : AppCompatActivity(), CoroutineScope by MainScope() { + + private lateinit var aMap: AMap + private lateinit var id: String + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_inspect_route) + PageNavigationManager.addActivity(this) + setupTopBarLayout() + if (OtherUtils.isNetworkConnected(this)) { + initData(savedInstanceState) + initEvent() + } else { + "糟糕,没有接入任何网络~".show(this) + } + } + + fun setupTopBarLayout() { + QMUIStatusBarHelper.translucent(this) //沉浸式状态栏 + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)) + ImmersionBar.with(this).statusBarDarkFont(false).init() + titleView.text = "巡检记录" + } + + fun initData(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + val uiSettings = aMap.uiSettings + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + + //根据id查询详情 + id = intent.getStringExtra("id")!! + val detailViewModel = ViewModelProvider(this).get(InspectDetailViewModel::class.java) + detailViewModel.getInspectDetail(id) + detailViewModel.resultModel.observe(this, Observer { + val detailData = it.data!! + inspectNameView.text = detailData.name + userNameView.text = detailData.user + startTimeView.text = detailData.startTime + endTimeView.text = detailData.endTime + //移动到巡检起始经纬度 + aMap.moveCamera( + CameraUpdateFactory.changeLatLng( + LatLng( + detailData.startLat, + detailData.startLng + ) + ) + ) + aMap.moveCamera(CameraUpdateFactory.zoomTo(15.toFloat())) + //瞄点画线 + val routeJson = detailData.routes!! + if (routeJson.isEmpty()) { + return@Observer + } + val pointArray = routeJson + .replace("[[", "") + .replace("]]", "") + .split("],[") + //设置起点 + addMarker(LatLng(detailData.startLat, detailData.startLng), R.mipmap.qidian) + //设置终点 + addMarker(LatLng(detailData.endLat, detailData.endLng), R.mipmap.zhongdian) + // + val taskViewModel = ViewModelProvider(this).get(TaskRecordViewModel::class.java) + taskViewModel.searchByInspection(id) + taskViewModel.resultModel.observe(this@InspectRouteActivity, Observer { taskModel -> + taskModel.data!!.list?.forEach { listBean -> + addMarker(LatLng(listBean.lat, listBean.lng), R.mipmap.jingshi) + } + }) + taskViewModel.loadState.observe(this@InspectRouteActivity, Observer { + "抱歉,无法查询到相关记录".show(this@InspectRouteActivity) + }) + //画线 + val latLngPoints: ArrayList = ArrayList() + pointArray.forEach { point -> + val split = point.split(",") + latLngPoints.add(LatLng(split[1].toDouble(), split[0].toDouble())) + } + aMap.addPolyline(PolylineOptions().addAll(latLngPoints).width(10.toFloat()).color(Color.RED)) + }) + detailViewModel.loadState.observe(this, Observer { + "抱歉,无法查询到相关记录".show(this) + }) + } + + fun initEvent() { + eventButton.setChangeAlphaWhenPress(true) + eventButton.setOnClickListener { + val intent = Intent(this, EventListActivity::class.java) + intent.putExtra("id", id) + startActivity(intent) + } + } + + private fun addMarker(point: LatLng, res: Int) { + val markerOption = MarkerOptions() + markerOption.position(point) + markerOption.icon(BitmapDescriptorFactory.fromResource(res)) + aMap.addMarker(markerOption) + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + cancel() + super.onDestroy() + mapView.onDestroy() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt index d075b96..8ed4a0c 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/InspectionQueryActivity.kt @@ -1,5 +1,6 @@ package com.casic.birmm.inspect.view +import android.content.Intent import android.os.Handler import android.os.Message import androidx.core.content.ContextCompat @@ -157,9 +158,10 @@ resultActivity.adapter.setOnItemClickListener(object : InspectListAdapter.OnItemClickListener { override fun onClick(position: Int) { -// val intent = Intent(resultActivity, InspectRouteActivity::class.java) -// intent.putExtra("id", resultActivity.dataBeans[position].id) -// resultActivity.startActivity(intent) + val intent = + Intent(resultActivity, InspectRouteActivity::class.java) + intent.putExtra("id", resultActivity.dataBeans[position].id) + resultActivity.startActivity(intent) } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt new file mode 100644 index 0000000..64a6128 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/InspectDetailViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.InspectDetailModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class InspectDetailViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun getInspectDetail(id: String) = + launch({ + resultModel.value = + RetrofitServiceManager.getInspectDetail(id) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt new file mode 100644 index 0000000..986fe06 --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/vm/TaskRecordViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.birmm.inspect.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.birmm.inspect.base.BaseViewModel +import com.casic.birmm.inspect.extensions.launch +import com.casic.birmm.inspect.model.TaskRecordModel +import com.casic.birmm.inspect.utils.LoadState +import com.casic.birmm.inspect.utils.retrofit.RetrofitServiceManager + +class TaskRecordViewModel : BaseViewModel() { + val resultModel = MutableLiveData() + + fun searchByInspection(inspectionId: String) = + launch({ + resultModel.value = + RetrofitServiceManager.searchByInspection(inspectionId) + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_list.xml b/app/src/main/res/layout/activity_event_list.xml new file mode 100644 index 0000000..c24752c --- /dev/null +++ b/app/src/main/res/layout/activity_event_list.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_route.xml b/app/src/main/res/layout/activity_inspect_route.xml new file mode 100644 index 0000000..4af9b53 --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_route.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index bcae777..30b2e5e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -74,6 +74,7 @@ android:textColor="@color/white" android:textSize="@dimen/titleFontSize" app:qmui_backgroundColor="@color/mainThemeColor" + app:qmui_borderColor="@color/mainThemeColor" app:qmui_radius="20dp" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/jingshi.png b/app/src/main/res/mipmap-xxhdpi/jingshi.png new file mode 100644 index 0000000..f567df5 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/jingshi.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/qidian.png b/app/src/main/res/mipmap-xxhdpi/qidian.png new file mode 100644 index 0000000..94290c6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/qidian.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/zhongdian.png b/app/src/main/res/mipmap-xxhdpi/zhongdian.png new file mode 100644 index 0000000..0a32aa3 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/zhongdian.png Binary files differ