diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_detail.xml b/app/src/main/res/layout/activity_well_detail.xml index 2090bfe..fab47e4 100644 --- a/app/src/main/res/layout/activity_well_detail.xml +++ b/app/src/main/res/layout/activity_well_detail.xml @@ -120,7 +120,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_detail.xml b/app/src/main/res/layout/activity_well_detail.xml index 2090bfe..fab47e4 100644 --- a/app/src/main/res/layout/activity_well_detail.xml +++ b/app/src/main/res/layout/activity_well_detail.xml @@ -120,7 +120,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/fragment_order_undetermined.xml b/app/src/main/res/layout/fragment_order_undetermined.xml index 77d9ef6..e473241 100644 --- a/app/src/main/res/layout/fragment_order_undetermined.xml +++ b/app/src/main/res/layout/fragment_order_undetermined.xml @@ -1,6 +1,39 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_detail.xml b/app/src/main/res/layout/activity_well_detail.xml index 2090bfe..fab47e4 100644 --- a/app/src/main/res/layout/activity_well_detail.xml +++ b/app/src/main/res/layout/activity_well_detail.xml @@ -120,7 +120,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/fragment_order_undetermined.xml b/app/src/main/res/layout/fragment_order_undetermined.xml index 77d9ef6..e473241 100644 --- a/app/src/main/res/layout/fragment_order_undetermined.xml +++ b/app/src/main/res/layout/fragment_order_undetermined.xml @@ -1,6 +1,39 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_todo_recycleview.xml b/app/src/main/res/layout/item_order_todo_recycleview.xml index e9300d3..81cb9a8 100644 --- a/app/src/main/res/layout/item_order_todo_recycleview.xml +++ b/app/src/main/res/layout/item_order_todo_recycleview.xml @@ -48,6 +48,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tempLayout" + android:paddingVertical="@dimen/dp_5" android:text="N57S862" android:textColor="@color/mainTextColor" android:textSize="@dimen/textFontSize" /> diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_detail.xml b/app/src/main/res/layout/activity_well_detail.xml index 2090bfe..fab47e4 100644 --- a/app/src/main/res/layout/activity_well_detail.xml +++ b/app/src/main/res/layout/activity_well_detail.xml @@ -120,7 +120,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/fragment_order_undetermined.xml b/app/src/main/res/layout/fragment_order_undetermined.xml index 77d9ef6..e473241 100644 --- a/app/src/main/res/layout/fragment_order_undetermined.xml +++ b/app/src/main/res/layout/fragment_order_undetermined.xml @@ -1,6 +1,39 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_todo_recycleview.xml b/app/src/main/res/layout/item_order_todo_recycleview.xml index e9300d3..81cb9a8 100644 --- a/app/src/main/res/layout/item_order_todo_recycleview.xml +++ b/app/src/main/res/layout/item_order_todo_recycleview.xml @@ -48,6 +48,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tempLayout" + android:paddingVertical="@dimen/dp_5" android:text="N57S862" android:textColor="@color/mainTextColor" android:textSize="@dimen/textFontSize" /> diff --git a/app/src/main/res/layout/item_order_undetermined_recycleview.xml b/app/src/main/res/layout/item_order_undetermined_recycleview.xml new file mode 100644 index 0000000..3fa246f --- /dev/null +++ b/app/src/main/res/layout/item_order_undetermined_recycleview.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_detail.xml b/app/src/main/res/layout/activity_well_detail.xml index 2090bfe..fab47e4 100644 --- a/app/src/main/res/layout/activity_well_detail.xml +++ b/app/src/main/res/layout/activity_well_detail.xml @@ -120,7 +120,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/fragment_order_undetermined.xml b/app/src/main/res/layout/fragment_order_undetermined.xml index 77d9ef6..e473241 100644 --- a/app/src/main/res/layout/fragment_order_undetermined.xml +++ b/app/src/main/res/layout/fragment_order_undetermined.xml @@ -1,6 +1,39 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_todo_recycleview.xml b/app/src/main/res/layout/item_order_todo_recycleview.xml index e9300d3..81cb9a8 100644 --- a/app/src/main/res/layout/item_order_todo_recycleview.xml +++ b/app/src/main/res/layout/item_order_todo_recycleview.xml @@ -48,6 +48,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tempLayout" + android:paddingVertical="@dimen/dp_5" android:text="N57S862" android:textColor="@color/mainTextColor" android:textSize="@dimen/textFontSize" /> diff --git a/app/src/main/res/layout/item_order_undetermined_recycleview.xml b/app/src/main/res/layout/item_order_undetermined_recycleview.xml new file mode 100644 index 0000000..3fa246f --- /dev/null +++ b/app/src/main/res/layout/item_order_undetermined_recycleview.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_tag_flowlayout.xml b/app/src/main/res/layout/item_tag_flowlayout.xml index 9cf5671..1e1e7c7 100644 --- a/app/src/main/res/layout/item_tag_flowlayout.xml +++ b/app/src/main/res/layout/item_tag_flowlayout.xml @@ -5,5 +5,6 @@ android:paddingHorizontal="@dimen/dp_5" android:paddingVertical="@dimen/dp_3" android:text="@string/app_name" + android:background="@drawable/selector_tag" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 42722ca..1e32515 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,5 +81,4 @@ implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' //标签流式布局 implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2' - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e81feb6..5060744 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,7 @@ + diff --git a/app/src/main/assets/svg/down.svg b/app/src/main/assets/svg/down.svg new file mode 100644 index 0000000..8a753ec --- /dev/null +++ b/app/src/main/assets/svg/down.svg @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..5a74934 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NineGridImageAdapter.kt @@ -0,0 +1,96 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.app.smartwell.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +@SuppressLint("NotifyDataSetChanged") +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 9 + private var imageData: ArrayList = ArrayList() + + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt new file mode 100644 index 0000000..1549504 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedAdapterAdapter.kt @@ -0,0 +1,98 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.model.UserDetailModel +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.SaveKeyValues +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken + +class UndeterminedAdapterAdapter( + private val context: Context, + private val dataRows: MutableList +) : RecyclerView.Adapter() { + + private lateinit var userDataModel: UserDetailModel.DataBean + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private val gson = Gson() + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): UndeterminedAdapterAdapter.ItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_order_undetermined_recycleview, parent, false) + return ItemViewHolder(view) + } + + override fun getItemCount(): Int = dataRows.size + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder( + holder: UndeterminedAdapterAdapter.ItemViewHolder, + position: Int + ) { + //绑定数据 + val rowsBean = dataRows[position] + holder.alarmTypeView.text = rowsBean.alarmContentName + holder.createTimeView.text = rowsBean.createTime + holder.wellCodeView.text = rowsBean.wellCode + holder.wellLocationView.text = rowsBean.position + + val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String + if (userDetailJson != "") { + userDataModel = gson.fromJson( + userDetailJson, + object : TypeToken() {}.type + ) + holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." + } + + //绑定事件 + if (listener != null) { + holder.itemView.setOnClickListener { + listener!!.onClicked(position) + } + holder.arrowImageView.setOnClickListener { + val rotateAnimation = holder.arrowImageView.animate() + rotateAnimation.duration = 300 + rotateAnimation.interpolator = LinearInterpolator() + if (holder.arrowImageView.rotation == 0f) { + rotateAnimation.rotation(180f) + } else { + rotateAnimation.rotation(0f) + } + //展开View + } + } + } + + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var alarmTypeView: TextView = view.findViewById(R.id.alarmTypeView) + var createTimeView: TextView = view.findViewById(R.id.createTimeView) + var wellCodeView: TextView = view.findViewById(R.id.wellCodeView) + var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) + var currentStateView: TextView = view.findViewById(R.id.currentStateView) + var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + } + + private var listener: OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(position: Int) + } + + fun setOnItemClickListener(onClickListener: OnItemClickListener?) { + this.listener = onClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt index 358ff17..6ed5ca0 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/Constant.kt @@ -26,7 +26,8 @@ const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 - const val ORDER_TRANSFER_OK = 21 + const val ORDER_TODO_OK = 21 + const val ORDER_DETERMINED_OK = 22//待确认和待处理完成都需要刷新此列表 const val ACCOUNT = "account" const val PASSWORD = "password" diff --git a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt index 32a6764..16300ba 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/MainActivity.kt @@ -40,6 +40,9 @@ override fun initData() { userDetailViewModel = ViewModelProvider(this).get(UserDetailViewModel::class.java) + } + + override fun initEvent() { userDetailViewModel.obtainUserDetail() userDetailViewModel.userDetailModel.observe(this, { if (it.code == 200) { @@ -48,9 +51,7 @@ it.message!!.show(this) } }) - } - override fun initEvent() { bottomNavigation.itemIconTintList = null bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> when (menuItem.itemId) { diff --git a/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt new file mode 100644 index 0000000..25f1340 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/view/OrderDetermineDetailActivity.kt @@ -0,0 +1,128 @@ +package com.casic.app.smartwell.view + +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.NineGridImageAdapter +import com.casic.app.smartwell.base.BaseActivity +import com.casic.app.smartwell.extensions.covertColor +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.extensions.toChinese +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.utils.DialogHelper +import com.casic.app.smartwell.utils.LoadState +import com.casic.app.smartwell.vm.WorkOrderDetailViewModel +import com.pengxh.app.multilib.widget.dialog.AlertMessageDialog +import kotlinx.android.synthetic.main.activity_order_determine_detail.* +import kotlinx.android.synthetic.main.include_base_title.* + +class OrderDetermineDetailActivity : BaseActivity() { + + private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel + private lateinit var imageAdapter: NineGridImageAdapter + private lateinit var jobId: String + private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 + private val realPaths: ArrayList = ArrayList() //真实图片路径 + + override fun initLayoutView(): Int = R.layout.activity_order_determine_detail + + override fun setupTopBarLayout() { + titleView.text = "工单详情" + leftBackView.visibility = View.VISIBLE + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + //初始化图片九宫格 + imageAdapter = NineGridImageAdapter(this) + addImageRecyclerView.layoutManager = GridLayoutManager(this, 3) + addImageRecyclerView.adapter = imageAdapter + + workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) + } + + override fun initEvent() { + workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) + workOrderDetailViewModel.detailModel.observe(this, { + if (it.code == 200) { + val orderDetail = it.data!![0] + alarmContentView.text = orderDetail.alarmContentName + alarmDateView.text = orderDetail.alarmTime + orderCodeView.text = orderDetail.jobCode + wellCodeView.text = orderDetail.wellCode + devCodeView.text = orderDetail.devcode + val level = orderDetail.alarmLevel.toString() + if (level == "") { + alarmLevelView.text = "未知" + alarmLevelView.setTextColor(R.color.mainTextColor.covertColor(this)) + } else { + alarmLevelView.text = level.toChinese() + alarmLevelView.setTextColor(R.color.redTextColor.covertColor(this)) + } + alarmValueView.text = orderDetail.alarmValue + val wellPosition = orderDetail.position.toString() + wellLocationView.text = wellPosition + if (wellPosition.length > 12) { + tipsImageView.visibility = View.VISIBLE + tipsImageView.setOnClickListener { + AlertMessageDialog.Builder() + .setContext(this) + .setTitle("窨井完整位置") + .setMessage(wellPosition) + .setPositiveButton("知道了").setOnDialogButtonClickListener {}.build() + .show() + } + } else { + tipsImageView.visibility = View.GONE + } + + acceptDateView.text = orderDetail.getJobTime + dispatchDateView.text = orderDetail.createTime + completedDateView.text = orderDetail.handleJobTime + + //转单 + + + //提交 + } + }) + + //数据加载状态处理 + workOrderDetailViewModel.loadState.observe(this, { + when (it) { + is LoadState.Loading -> { + DialogHelper.showLoadingDialog(this, "数据加载中,请稍后") + } + else -> { + DialogHelper.dismissLoadingDialog() + } + } + }) + + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { +// selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@OrderDetermineDetailActivity) + } else { + this@OrderDetermineDetailActivity.navigatePageTo( + BigImageActivity::class.java, + position, + realPaths + ) + } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt index 6016a40..df29d3d 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/SearchWorkOrderActivity.kt @@ -19,6 +19,7 @@ import com.jzxiang.pickerview.data.Type import com.zhy.view.flowlayout.FlowLayout import com.zhy.view.flowlayout.TagAdapter +import com.zhy.view.flowlayout.TagFlowLayout import kotlinx.android.synthetic.main.activity_order_search.* import kotlinx.android.synthetic.main.include_base_title.* @@ -44,6 +45,12 @@ inflater = LayoutInflater.from(this) //告警内容 contentTypeViewModel = ViewModelProvider(this).get(AlarmContentTypeViewModel::class.java) + + //工单状态 + orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) + } + + override fun initEvent() { contentTypeViewModel.obtainAlarmContentType() contentTypeViewModel.listModel.observe(this, { if (it.code == 200) { @@ -64,8 +71,6 @@ } }) - //工单状态 - orderStatusViewModel = ViewModelProvider(this).get(OrderStatusViewModel::class.java) orderStatusViewModel.obtainOrderStatus() orderStatusViewModel.listModel.observe(this, { if (it.code == 200) { @@ -97,11 +102,19 @@ return tagView } } + orderStatusLayout.setOnTagClickListener(object : TagFlowLayout.OnTagClickListener { + override fun onTagClick( + view: View?, + position: Int, + parent: FlowLayout? + ): Boolean { + + return true + } + }) } }) - } - override fun initEvent() { selectStartTimeView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(ContextCompat.getColor(this, R.color.mainThemeColor)) diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt index 0bcb4aa..018e963 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellDetailActivity.kt @@ -5,7 +5,6 @@ import androidx.recyclerview.widget.GridLayoutManager import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.Poi -import com.amap.api.navi.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.ImageRecyclerViewAdapter import com.casic.app.smartwell.base.BaseActivity @@ -25,6 +24,7 @@ class WellDetailActivity : BaseActivity() { private lateinit var wellDetailViewModel: WellDetailViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_detail @@ -35,8 +35,16 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellDetailViewModel = ViewModelProvider(this).get(WellDetailViewModel::class.java) + + //监控内容 + monitorLayout.setOnClickListener { + this.navigatePageTo(WellMonitorActivity::class.java, wellId) + } + } + + override fun initEvent() { wellDetailViewModel.obtainWellDetail(id = wellId) wellDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -116,14 +124,6 @@ } } }) - - //监控内容 - monitorLayout.setOnClickListener { - this.navigatePageTo(WellMonitorActivity::class.java, wellId) - } - } - - override fun initEvent() { wellDetailViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 8e804f8..e907ca4 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 @@ -55,6 +55,11 @@ easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + weakReferenceHandler = WeakReferenceHandler(this) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -73,10 +78,8 @@ 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 @@ -102,9 +105,7 @@ weakReferenceHandler.sendEmptyMessage(2022032501) } }) - } - override fun initEvent() { wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() diff --git a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt index 34f0f5d..1259b72 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellMonitorActivity.kt @@ -16,6 +16,7 @@ class WellMonitorActivity : BaseActivity() { private lateinit var wellMonitorViewModel: WellMonitorViewModel + private lateinit var wellId: String override fun initLayoutView(): Int = R.layout.activity_well_monitor @@ -26,8 +27,11 @@ } override fun initData() { - val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! + wellId = intent.getStringExtra(Constant.INTENT_PARAM)!! wellMonitorViewModel = ViewModelProvider(this).get(WellMonitorViewModel::class.java) + } + + override fun initEvent() { wellMonitorViewModel.obtainMonitorResult(id = wellId) wellMonitorViewModel.monitorModel.observe(this, { if (it.code == 200) { @@ -41,9 +45,6 @@ } } }) - } - - override fun initEvent() { wellMonitorViewModel.loadState.observe(this, { when (it) { is LoadState.Loading -> { 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 index bc64dca..efd5d55 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WellOperationActivity.kt @@ -59,7 +59,13 @@ override fun initData() { easyPopupWindow = EasyPopupWindow(this) easyPopupWindow.setBackgroundDrawable(null) + weakReferenceHandler = WeakReferenceHandler(this) wellTypeViewModel = ViewModelProvider(this).get(WellTypeViewModel::class.java) + wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) + operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) + } + + override fun initEvent() { wellTypeViewModel.obtainWellType() wellTypeViewModel.wellTypeModel.observe(this, { if (it.code == 200) { @@ -78,8 +84,6 @@ easyPopupWindow.setupPopupData(items) } }) - wellListViewModel = ViewModelProvider(this).get(WellListViewModel::class.java) - weakReferenceHandler = WeakReferenceHandler(this) obtainWellList(keywords, wellType, pageIndex) //数据监听 wellListViewModel.listModel.observe(this, { @@ -107,10 +111,37 @@ weakReferenceHandler.sendEmptyMessage(2022032801) } }) - operationViewModel = ViewModelProvider(this).get(WellOperationViewModel::class.java) - } - override fun initEvent() { + //撤防布防状态监听 + 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) + } + } + }) + wellTypeLayout.setOnClickListener { //旋转arrowImageView val rotateAnimation = arrowImageView.animate() @@ -146,36 +177,6 @@ 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( diff --git a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt index 9667273..b5ade26 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/WorkOrderDetailActivity.kt @@ -14,6 +14,7 @@ import com.casic.app.smartwell.utils.DialogHelper import com.casic.app.smartwell.utils.LoadState import com.casic.app.smartwell.view.fragment.TodoOrderFragment +import com.casic.app.smartwell.view.fragment.UndeterminedFragment import com.casic.app.smartwell.vm.AcceptOrderViewModel import com.casic.app.smartwell.vm.WellDetailViewModel import com.casic.app.smartwell.vm.WorkOrderDetailViewModel @@ -27,6 +28,7 @@ private lateinit var workOrderDetailViewModel: WorkOrderDetailViewModel private lateinit var wellDetailViewModel: WellDetailViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var jobId: String override fun initLayoutView(): Int = R.layout.activity_order_detail @@ -37,9 +39,12 @@ } override fun initData() { - val jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! + jobId = intent.getStringExtra(Constant.INTENT_PARAM)!! workOrderDetailViewModel = ViewModelProvider(this).get(WorkOrderDetailViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { workOrderDetailViewModel.obtainWorkOrderDetail(id = jobId) workOrderDetailViewModel.detailModel.observe(this, { if (it.code == 200) { @@ -132,9 +137,6 @@ } } }) - } - - override fun initEvent() { //数据加载状态处理 workOrderDetailViewModel.loadState.observe(this, { when (it) { @@ -156,9 +158,9 @@ is LoadState.Success -> { DialogHelper.dismissLoadingDialog() "接单成功".show(this) - //通知列表刷行数据 - TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + //通知列表刷新数据 + TodoOrderFragment.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) this.finish() } else -> { 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 917e20c..92fd8ab 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 @@ -41,19 +41,11 @@ } override fun initEvent() { - - } - - override fun onResume() { - super.onResume() - //每次页面切换都需要重新刷新不同状态的窨井数量 - wellCountViewModel.countWellByState() wellCountViewModel.resultModel.observe(this, { unDeployedWellView.text = it["bfWell"] deployedWellView.text = it["cfWell"] allWellDataView.text = it["total"] }) - workOrderViewModel.countWorkOrderByState() workOrderViewModel.resultModel.observe(this, { if (it["beforeGet"]!!.length > 4 || it["beforeConfirm"]!!.length > 4 || it["inHandle"]!!.length > 4 || it["over"]!!.length > 4 @@ -69,4 +61,11 @@ completedDataView.text = it["over"] }) } + + override fun onResume() { + super.onResume() + //每次页面切换都需要重新刷新不同状态的窨井数量 + wellCountViewModel.countWellByState() + workOrderViewModel.countWorkOrderByState() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt index 0cf61eb..0869367 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/TodoOrderFragment.kt @@ -4,7 +4,6 @@ import android.os.Handler import android.os.Looper import android.os.Message -import android.util.Log import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R @@ -25,16 +24,15 @@ class TodoOrderFragment : BaseFragment() { - private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private lateinit var workOrderListViewModel: WorkOrderListViewModel private lateinit var acceptOrderViewModel: AcceptOrderViewModel + private lateinit var workOrderListAdapter: TodoWorkOrderListAdapter private var dataBeans: MutableList = ArrayList() private var pageIndex = 1 private var isRefresh = false private var isLoadMore = false companion object { - private const val kTag = "TodoOrderFragment" private var weakReferenceHandler: WeakReferenceHandler? = null fun sendEmptyMessage(what: Int) { @@ -51,6 +49,9 @@ weakReferenceHandler = WeakReferenceHandler(this) workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) acceptOrderViewModel = ViewModelProvider(this).get(AcceptOrderViewModel::class.java) + } + + override fun initEvent() { obtainWorkOrderList(pageIndex) workOrderListViewModel.resultModel.observe(this, { if (it.code == 200) { @@ -77,20 +78,6 @@ weakReferenceHandler!!.sendEmptyMessage(2022032901) } }) - } - - override fun initEvent() { - todoOrderLayout.setOnRefreshListener { - isRefresh = true - //刷新之后页码重置 - pageIndex = 1 - obtainWorkOrderList(pageIndex) - } - todoOrderLayout.setOnLoadMoreListener { - isLoadMore = true - pageIndex++ - obtainWorkOrderList(pageIndex) - } //接单状态处理 acceptOrderViewModel.loadState.observe(this, { @@ -102,8 +89,8 @@ DialogHelper.dismissLoadingDialog() "接单成功".show(requireContext()) //通知列表刷行数据 - weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TRANSFER_OK) - //TODO 还需要通知待确认列表 + weakReferenceHandler!!.sendEmptyMessage(Constant.ORDER_TODO_OK) + UndeterminedFragment.sendEmptyMessage(Constant.ORDER_DETERMINED_OK) } else -> { DialogHelper.dismissLoadingDialog() @@ -111,6 +98,18 @@ } } }) + + todoOrderLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + todoOrderLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } private fun obtainWorkOrderList(index: Int) { @@ -126,8 +125,7 @@ super.handleMessage(msg) val fragment = reference.get()!! when (msg.what) { - Constant.ORDER_TRANSFER_OK -> { - Log.d(kTag, "转单成功,更新列表") + Constant.ORDER_TODO_OK -> { fragment.isRefresh = true fragment.pageIndex = 1 fragment.obtainWorkOrderList(fragment.pageIndex) diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt index b1284a1..28252c0 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedFragment.kt @@ -1,17 +1,144 @@ package com.casic.app.smartwell.view.fragment +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.os.Message +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager import com.casic.app.smartwell.R +import com.casic.app.smartwell.adapter.UndeterminedAdapterAdapter +import com.casic.app.smartwell.extensions.navigatePageTo +import com.casic.app.smartwell.extensions.show +import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.Constant +import com.casic.app.smartwell.view.OrderDetermineDetailActivity +import com.casic.app.smartwell.vm.WorkOrderListViewModel import com.pengxh.app.multilib.base.BaseFragment +import kotlinx.android.synthetic.main.fragment_order_undetermined.* +import java.lang.ref.WeakReference class UndeterminedFragment : BaseFragment() { + + private lateinit var workOrderListViewModel: WorkOrderListViewModel + private lateinit var undeterminedAdapter: UndeterminedAdapterAdapter + private var dataBeans: MutableList = ArrayList() + private var pageIndex = 1 + private var isRefresh = false + private var isLoadMore = false + + companion object { + private const val kTag = "UndeterminedFragment" + private var weakReferenceHandler: WeakReferenceHandler? = null + + fun sendEmptyMessage(what: Int) { + if (weakReferenceHandler == null) { + return + } + weakReferenceHandler!!.sendEmptyMessage(what) + } + } + override fun initLayoutView(): Int = R.layout.fragment_order_undetermined override fun initData() { - + weakReferenceHandler = WeakReferenceHandler(this) + workOrderListViewModel = ViewModelProvider(this).get(WorkOrderListViewModel::class.java) } override fun initEvent() { + obtainWorkOrderList(pageIndex) + workOrderListViewModel.resultModel.observe(this, { + if (it.code == 200) { + val dataRows = it.data?.rows + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + undeterminedLayout.finishRefresh() + isRefresh = false + } + isLoadMore -> { + if (dataRows?.size == 0) { + "到底了,别拉了".show(requireContext()) + } + dataBeans.addAll(dataRows!!) + undeterminedLayout.finishLoadMore() + isLoadMore = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler!!.sendEmptyMessage(2022033001) + } + }) + undeterminedLayout.setOnRefreshListener { + isRefresh = true + //刷新之后页码重置 + pageIndex = 1 + obtainWorkOrderList(pageIndex) + } + undeterminedLayout.setOnLoadMoreListener { + isLoadMore = true + pageIndex++ + obtainWorkOrderList(pageIndex) + } } + private fun obtainWorkOrderList(index: Int) { + workOrderListViewModel.obtainWorkOrderListByState(jobStatus = "1", page = index) + } + + private class WeakReferenceHandler(fragment: UndeterminedFragment) : + Handler(Looper.getMainLooper()) { + private val reference: WeakReference = WeakReference(fragment) + + @SuppressLint("NotifyDataSetChanged") + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val fragment = reference.get()!! + when (msg.what) { + Constant.ORDER_DETERMINED_OK -> { + fragment.isRefresh = true + fragment.pageIndex = 1 + fragment.obtainWorkOrderList(fragment.pageIndex) + } + 2022033001 -> { + if (fragment.isRefresh || fragment.isLoadMore) { + fragment.undeterminedAdapter.notifyDataSetChanged() + } else { //首次加载数据 + if (fragment.dataBeans.size == 0) { + fragment.emptyView!!.show("抱歉,无法查询到相关记录", null) + } else { + fragment.emptyView!!.hide() + fragment.undeterminedAdapter = UndeterminedAdapterAdapter( + fragment.requireContext(), + fragment.dataBeans + ) + fragment.undeterminedView!!.layoutManager = + LinearLayoutManager(fragment.requireContext()) + fragment.undeterminedView!!.adapter = fragment.undeterminedAdapter + fragment.undeterminedAdapter.setOnItemClickListener(object : + UndeterminedAdapterAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + val jobId = fragment.dataBeans[position].jobId.toString() + if (jobId == "") { + "工单编号异常,无法查看详情".show(fragment.requireContext()) + return + } + fragment.requireContext() + .navigatePageTo( + OrderDetermineDetailActivity::class.java, + jobId + ) + } + }) + } + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml new file mode 100644 index 0000000..70ca160 --- /dev/null +++ b/app/src/main/res/drawable/bg_layout_stroke_radius_3.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml new file mode 100644 index 0000000..4128342 --- /dev/null +++ b/app/src/main/res/drawable/ic_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_tag.xml b/app/src/main/res/drawable/selector_tag.xml new file mode 100644 index 0000000..c1fee7b --- /dev/null +++ b/app/src/main/res/drawable/selector_tag.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/tag_checked.xml b/app/src/main/res/drawable/tag_checked.xml new file mode 100644 index 0000000..616dcb1 --- /dev/null +++ b/app/src/main/res/drawable/tag_checked.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tag_normal.xml b/app/src/main/res/drawable/tag_normal.xml new file mode 100644 index 0000000..39b14cc --- /dev/null +++ b/app/src/main/res/drawable/tag_normal.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_order_detail.xml b/app/src/main/res/layout/activity_order_detail.xml index 9b07e65..50ea9d7 100644 --- a/app/src/main/res/layout/activity_order_detail.xml +++ b/app/src/main/res/layout/activity_order_detail.xml @@ -155,7 +155,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/activity_order_determine_detail.xml b/app/src/main/res/layout/activity_order_determine_detail.xml new file mode 100644 index 0000000..b38af39 --- /dev/null +++ b/app/src/main/res/layout/activity_order_determine_detail.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_well_detail.xml b/app/src/main/res/layout/activity_well_detail.xml index 2090bfe..fab47e4 100644 --- a/app/src/main/res/layout/activity_well_detail.xml +++ b/app/src/main/res/layout/activity_well_detail.xml @@ -120,7 +120,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" - android:text="@string/app_name" + android:text="详细地址" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> diff --git a/app/src/main/res/layout/fragment_order_undetermined.xml b/app/src/main/res/layout/fragment_order_undetermined.xml index 77d9ef6..e473241 100644 --- a/app/src/main/res/layout/fragment_order_undetermined.xml +++ b/app/src/main/res/layout/fragment_order_undetermined.xml @@ -1,6 +1,39 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_todo_recycleview.xml b/app/src/main/res/layout/item_order_todo_recycleview.xml index e9300d3..81cb9a8 100644 --- a/app/src/main/res/layout/item_order_todo_recycleview.xml +++ b/app/src/main/res/layout/item_order_todo_recycleview.xml @@ -48,6 +48,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tempLayout" + android:paddingVertical="@dimen/dp_5" android:text="N57S862" android:textColor="@color/mainTextColor" android:textSize="@dimen/textFontSize" /> diff --git a/app/src/main/res/layout/item_order_undetermined_recycleview.xml b/app/src/main/res/layout/item_order_undetermined_recycleview.xml new file mode 100644 index 0000000..3fa246f --- /dev/null +++ b/app/src/main/res/layout/item_order_undetermined_recycleview.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_tag_flowlayout.xml b/app/src/main/res/layout/item_tag_flowlayout.xml index 9cf5671..1e1e7c7 100644 --- a/app/src/main/res/layout/item_tag_flowlayout.xml +++ b/app/src/main/res/layout/item_tag_flowlayout.xml @@ -5,5 +5,6 @@ android:paddingHorizontal="@dimen/dp_5" android:paddingVertical="@dimen/dp_3" android:text="@string/app_name" + android:background="@drawable/selector_tag" android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/clock.png b/app/src/main/res/mipmap-xxhdpi/clock.png new file mode 100644 index 0000000..5359c6f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/clock.png Binary files differ