diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_management.xml b/app/src/main/res/layout/activity_well_management.xml index 6f61fc4..06c9434 100644 --- a/app/src/main/res/layout/activity_well_management.xml +++ b/app/src/main/res/layout/activity_well_management.xml @@ -9,86 +9,7 @@ - - - - - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_management.xml b/app/src/main/res/layout/activity_well_management.xml index 6f61fc4..06c9434 100644 --- a/app/src/main/res/layout/activity_well_management.xml +++ b/app/src/main/res/layout/activity_well_management.xml @@ -9,86 +9,7 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_management.xml b/app/src/main/res/layout/activity_well_management.xml index 6f61fc4..06c9434 100644 --- a/app/src/main/res/layout/activity_well_management.xml +++ b/app/src/main/res/layout/activity_well_management.xml @@ -9,86 +9,7 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_search_bar.xml b/app/src/main/res/layout/include_search_bar.xml new file mode 100644 index 0000000..7a416d6 --- /dev/null +++ b/app/src/main/res/layout/include_search_bar.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_management.xml b/app/src/main/res/layout/activity_well_management.xml index 6f61fc4..06c9434 100644 --- a/app/src/main/res/layout/activity_well_management.xml +++ b/app/src/main/res/layout/activity_well_management.xml @@ -9,86 +9,7 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_search_bar.xml b/app/src/main/res/layout/include_search_bar.xml new file mode 100644 index 0000000..7a416d6 --- /dev/null +++ b/app/src/main/res/layout/include_search_bar.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_well_operation_recycleview.xml b/app/src/main/res/layout/item_well_operation_recycleview.xml new file mode 100644 index 0000000..75c154f --- /dev/null +++ b/app/src/main/res/layout/item_well_operation_recycleview.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e206b5e..e72465c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,7 @@ + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_management.xml b/app/src/main/res/layout/activity_well_management.xml index 6f61fc4..06c9434 100644 --- a/app/src/main/res/layout/activity_well_management.xml +++ b/app/src/main/res/layout/activity_well_management.xml @@ -9,86 +9,7 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_search_bar.xml b/app/src/main/res/layout/include_search_bar.xml new file mode 100644 index 0000000..7a416d6 --- /dev/null +++ b/app/src/main/res/layout/include_search_bar.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_well_operation_recycleview.xml b/app/src/main/res/layout/item_well_operation_recycleview.xml new file mode 100644 index 0000000..75c154f --- /dev/null +++ b/app/src/main/res/layout/item_well_operation_recycleview.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_well_recycleview.xml b/app/src/main/res/layout/item_well_recycleview.xml index 20b5126..2f15441 100644 --- a/app/src/main/res/layout/item_well_recycleview.xml +++ b/app/src/main/res/layout/item_well_recycleview.xml @@ -18,22 +18,36 @@ android:layout_weight="1" android:padding="@dimen/dp_10"> - + android:layout_height="wrap_content"> - + + + + + diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt index 6f7029b..d5c580f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellListAdapter.kt @@ -26,8 +26,8 @@ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { //绑定数据 val rowsBean = dataRows[position] - holder.wellCodeView.text = rowsBean.wellCode holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellCodeView.text = rowsBean.wellCode holder.wellLocationView.text = rowsBean.position if (rowsBean.bfztName == "布防") { holder.wellStateView.setImageResource(R.mipmap.ybf) @@ -48,8 +48,8 @@ override fun getItemCount(): Int = dataRows.size inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) - var wellTypeView: TextView = view.findViewById(R.id.wellTypeView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) var wellStateView: ImageView = view.findViewById(R.id.wellStateView) diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt new file mode 100644 index 0000000..8d4fe45 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/WellOperationAdapter.kt @@ -0,0 +1,87 @@ +package com.casic.app.smartwell.adapter + +import android.content.Context +import android.content.res.ColorStateList +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.model.WellListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton + +class WellOperationAdapter( + private val context: Context, private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_well_operation_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + //绑定数据 + val rowsBean = dataRows[position] + holder.wellCodeView.text = rowsBean.wellCode + holder.wellTypeView.text = rowsBean.wellTypeName + holder.wellLocationView.text = rowsBean.position + if (rowsBean.bfztName == "布防") { + holder.operationButton.text = "撤防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.redTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.redTextColor.covertColor(context)) + } else { + holder.operationButton.text = "布防" + holder.operationButton.setStrokeColors( + ColorStateList.valueOf( + R.color.greenTextColor.covertColor(context) + ) + ) + holder.operationButton.setBackgroundColor(R.color.greenTextColor.covertColor(context)) + } + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.operationButton.setOnClickListener { + listener!!.onOperationClicked(position) + } + holder.navigationButton.setOnClickListener { + listener!!.onNavigationButtonClicked(position) + } + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellTypeView: QMUIRoundButton = view.findViewById(R.id.wellTypeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton) + var navigationButton: QMUIRoundButton = view.findViewById(R.id.navigationButton) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + + fun onOperationClicked(position: Int) + + fun onNavigationButtonClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt index 174b53c..0fcd0a1 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitService.kt @@ -64,6 +64,17 @@ ): WellMonitorModel /** + * 闸井布防撤防 + */ + @FormUrlEncoded + @POST("/well/bfcf") + suspend fun obtainOperationResult( + @Header("token") token: String, + @Field("wellId") wellId: String, + @Field("bfzt") bfzt: String + ): CommonResultModel + + /** * 获取用户信息 */ @GET("/user/info") @@ -73,7 +84,7 @@ * 修改密码 */ @FormUrlEncoded - @POST("mgr/changePwd") + @POST("/mgr/changePwd") suspend fun changePassword( @Header("token") token: String, @Field("oldPwd") oldPwd: String, @@ -89,6 +100,6 @@ /** * 更新APK版本 */ - @POST("app/checkVersion") + @POST("/app/checkVersion") suspend fun obtainVersionResult(@Header("token") token: String): VersionResultModel } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt index deeaa36..c564911 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -63,6 +63,13 @@ } /** + * 闸井布防撤防 + */ + suspend fun obtainOperationResult(wellId: String, bfzt: String): CommonResultModel { + return api.obtainOperationResult(AuthenticationHelper.token!!, wellId, bfzt) + } + + /** * 获取用户信息 */ suspend fun obtainUserDetail(): UserDetailModel { diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt index a3ce02e..8e804f8 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellManagementActivity.kt @@ -23,6 +23,7 @@ import com.casic.app.smartwell.widgets.EasyPopupWindow import kotlinx.android.synthetic.main.activity_well_management.* import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* import java.lang.ref.WeakReference diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt new file mode 100644 index 0000000..a73cc8f --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -0,0 +1,285 @@ +package com.casic.app.smartwell.view + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.Poi +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.WellOperationAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.showRouteOnMap +import com.casic.app.smartwell.model.WellListModel +import com.casic.app.smartwell.model.WellTypeModel +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WellListViewModel +import com.casic.app.smartwell.vm.WellOperationViewModel +import com.casic.app.smartwell.vm.WellTypeViewModel +import com.casic.app.smartwell.widgets.EasyPopupWindow +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_well_operation.* +import kotlinx.android.synthetic.main.include_base_title.* +import kotlinx.android.synthetic.main.include_search_bar.* +import java.lang.ref.WeakReference + +class WellOperationActivity : BaseActivity() { + + private lateinit var wellTypeViewModel: WellTypeViewModel + private lateinit var wellListViewModel: WellListViewModel + private lateinit var operationViewModel: WellOperationViewModel + private lateinit var easyPopupWindow: EasyPopupWindow + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var wellOperationAdapter: WellOperationAdapter + private var items: MutableList = ArrayList() + private var wellTypeModel = WellTypeModel.DataBean() + private var dataBeans: MutableList = ArrayList() + private var keywords = "" + private var wellType = "" + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + private var clickedPosition = 0 + + override fun initLayoutView(): Int = R.layout.activity_well_operation + + override fun setupTopBarLayout() { + titleView.text = "布防撤防" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + easyPopupWindow = EasyPopupWindow(this) + easyPopupWindow.setBackgroundDrawable(null) + wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellTypeViewModel.obtainWellType() + wellTypeViewModel.wellTypeModel.observe(this, { + if (it.code == 200) { + it.data!!.forEachIndexed { index, dataBean -> + val bean: WellTypeModel.DataBean + if (index == 0) { + bean = WellTypeModel.DataBean() + bean.id = "" + bean.name = "全\u3000部" + bean.value = "" + } else { + bean = dataBean + } + items.add(bean) + } + easyPopupWindow.setupPopupData(items) + } + }) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + obtainWellList(keywords, wellType, pageIndex) + //数据监听 + wellListViewModel.listModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + operationRefreshLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(this) + } + dataBeans.addAll(dataRows!!) + operationRefreshLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022032801) + } + }) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { + wellTypeLayout.setOnClickListener { + //旋转arrowImageView + val rotateAnimation = arrowImageView.animate() + rotateAnimation.duration = 200 + rotateAnimation.interpolator = LinearInterpolator() + rotateAnimation.rotation(180f) + easyPopupWindow.showAsDropDown(wellTypeLayout) + easyPopupWindow.setOnPopupWindowClickListener(object : + EasyPopupWindow.OnPopupWindowClickListener { + override fun onPopupClick(position: Int) { + rotateAnimation.rotation(0f) + wellTypeModel = items[position] + wellTypeView.text = wellTypeModel.name + } + }) + } + + searchTextView.setOnClickListener { + keywords = searchInputView.text.toString().trim() + wellType = wellTypeModel.value.toString() + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + + operationRefreshLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWellList(keywords, wellType, pageIndex) + } + operationRefreshLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWellList(keywords, wellType, pageIndex) + } + + //撤防布防状态监听 + operationViewModel.operationResultModel.observe(this, { + if (it.code == 200) { + val rowsBean = dataBeans[clickedPosition] + if (rowsBean.bfztName == "布防") { + rowsBean.bfzt = "1" + rowsBean.bfztName = "撤防" + } else { + rowsBean.bfzt = "0" + rowsBean.bfztName = "布防" + } + } + }) + operationViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "处理中,请稍后") + } + is LoadState.Success -> { + DialogHelper.dismissLoadingDialog() + "操作成功".show(this) + wellOperationAdapter.notifyItemChanged(clickedPosition) + } + else -> { + DialogHelper.dismissLoadingDialog() + "操作失败".show(this) + } + } + }) + } + + private fun obtainWellList( + keywords: String?, wellType: String?, pageIndex: Int + ) { + wellListViewModel.obtainWellList( + keywords = keywords, + wellType = wellType, + deptid = "", + isAlarm = "", + page = pageIndex + ) + } + + private class WeakReferenceHandler(activity: WellOperationActivity) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(activity) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val activity = reference.get()!! + if (msg.what == 2022032801) { + if (activity.isRefresh || activity.isLoadMore) { + activity.wellOperationAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (activity.dataBeans.size == 0) { + activity.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + activity.emptyView!!.hide() + activity.wellOperationAdapter = + WellOperationAdapter(activity, activity.dataBeans) + activity.operationListView!!.layoutManager = LinearLayoutManager(activity) + activity.operationListView!!.adapter = activity.wellOperationAdapter + activity.wellOperationAdapter.setOnItemClickListener(object : + WellOperationAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val wellId = activity.dataBeans[position].id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + activity.navigatePageTo(WellDetailActivity::class.java, wellId) + } + + override fun onOperationClicked(position: Int) { + //标记被点击的item位置 + activity.clickedPosition = position + + val detailModel = activity.dataBeans[position] + val wellId = detailModel.id.toString() + if (wellId == "") { + "井编号异常,无法查看详情".show(activity) + return + } + val bfzt = if (detailModel.bfztName == "布防") { + "0" + } else { + "1" + } + val tips = if (detailModel.bfztName == "布防") { + "撤防" + } else { + "布防" + } + AlertControlDialog.Builder() + .setContext(activity) + .setTitle("操作提示") + .setMessage("确定将该井${tips}吗") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + activity.operationViewModel.obtainOperationResult( + wellId, bfzt + ) + } + + override fun onCancelClick() { + + } + }) + .build().show() + } + + override fun onNavigationButtonClicked(position: Int) { + val wellDetail = activity.dataBeans[position] + val lat = wellDetail.latGaode.toString() + val lng = wellDetail.lngGaode.toString() + if (lat == "" || lng == "") { + "窨井经纬度异常,无法开启导航".show(activity) + return + } + Poi( + wellDetail.position, + LatLng(lat.toDouble(), lng.toDouble()), + "" + ).showRouteOnMap(activity) + } + }) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index b3bb6a9..a494283 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -5,6 +5,7 @@ import com.casic.app.smartwell.adapter.HomeRecycleAdapter import com.casic.app.smartwell.extensions.navigatePageTo import com.casic.app.smartwell.view.WellManagementActivity +import com.casic.app.smartwell.view.WellOperationActivity import com.pengxh.app.multilib.base.BaseFragment import kotlinx.android.synthetic.main.fragment_home.* @@ -22,7 +23,7 @@ when (position) { 0 -> requireContext().navigatePageTo(WellManagementActivity::class.java) // 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) -// 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 2 -> requireContext().navigatePageTo(WellOperationActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt new file mode 100644 index 0000000..43c66a6 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/vm/WellOperationViewModel.kt @@ -0,0 +1,20 @@ +package com.casic.app.smartwell.vm + +import androidx.lifecycle.MutableLiveData +import com.casic.app.smartwell.base.BaseViewModel +import com.casic.app.smartwell.extensions.launch +import com.casic.app.smartwell.model.CommonResultModel +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.utils.retrofit.RetrofitServiceManager + +class WellOperationViewModel : BaseViewModel() { + val operationResultModel = MutableLiveData() + + fun obtainOperationResult(wellId: String, bfzt: String) = launch({ + loadState.value = LoadState.Loading + operationResultModel.value = RetrofitServiceManager.obtainOperationResult(wellId, bfzt) + loadState.value = LoadState.Success + }, { + loadState.value = LoadState.Fail + }) +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_management.xml b/app/src/main/res/layout/activity_well_management.xml index 6f61fc4..06c9434 100644 --- a/app/src/main/res/layout/activity_well_management.xml +++ b/app/src/main/res/layout/activity_well_management.xml @@ -9,86 +9,7 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_search_bar.xml b/app/src/main/res/layout/include_search_bar.xml new file mode 100644 index 0000000..7a416d6 --- /dev/null +++ b/app/src/main/res/layout/include_search_bar.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_well_operation_recycleview.xml b/app/src/main/res/layout/item_well_operation_recycleview.xml new file mode 100644 index 0000000..75c154f --- /dev/null +++ b/app/src/main/res/layout/item_well_operation_recycleview.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_well_recycleview.xml b/app/src/main/res/layout/item_well_recycleview.xml index 20b5126..2f15441 100644 --- a/app/src/main/res/layout/item_well_recycleview.xml +++ b/app/src/main/res/layout/item_well_recycleview.xml @@ -18,22 +18,36 @@ android:layout_weight="1" android:padding="@dimen/dp_10"> - + android:layout_height="wrap_content"> - + + + + #F7F7F7 #CCCCCC #13AD00 + #F86364 #54FFFFFF #54000000