diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(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 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
index 52bbc99..a07e3b8 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.utils
-import android.R
import android.app.Activity
import android.view.View
import android.view.ViewGroup
@@ -19,7 +18,7 @@
decorView.addView(statusView)
// 设置根布局的参数
val rootView =
- (activity.findViewById(R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
+ (activity.findViewById(android.R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
rootView.fitsSystemWindows = true
rootView.clipToPadding = true
}
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
index 52bbc99..a07e3b8 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.utils
-import android.R
import android.app.Activity
import android.view.View
import android.view.ViewGroup
@@ -19,7 +18,7 @@
decorView.addView(statusView)
// 设置根布局的参数
val rootView =
- (activity.findViewById(R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
+ (activity.findViewById(android.R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
rootView.fitsSystemWindows = true
rootView.clipToPadding = true
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
new file mode 100644
index 0000000..e4e1bf4
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
@@ -0,0 +1,96 @@
+package com.casic.qd.smartwell.utils
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.convertColor
+import com.pengxh.app.multilib.utils.SizeUtil
+
+class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() {
+ private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val radius: Int
+
+ init {
+ linePaint.color = R.color.hintTextColor.convertColor()
+ linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ radius = SizeUtil.dp2px(context, 7.5f)
+ }
+
+ override fun getItemOffsets(
+ outRect: Rect, view: View,
+ parent: RecyclerView, state: RecyclerView.State
+ ) {
+ super.getItemOffsets(outRect, view, parent, state)
+ outRect.left = SizeUtil.dp2px(context, 16.5f)
+ }
+
+ override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
+ super.onDraw(canvas, parent, state)
+ val childCount = parent.childCount
+ val layoutManager = parent.layoutManager
+ for (i in 0 until childCount) {
+ val childView = parent.getChildAt(i)
+ val childViewHeight = childView.height
+ val itemCount = parent.adapter!!.itemCount
+ val leftDecorationWidth = layoutManager!!.getLeftDecorationWidth(childView)
+ val topDecorationHeight = layoutManager.getTopDecorationHeight(childView)
+ val startX = (leftDecorationWidth shr 1).toFloat()
+ // 圆顶部部分竖线,起点 Y
+ val topStartY = (childView.top - topDecorationHeight).toFloat()
+ // 圆顶部部分竖线,终点 Y
+ val topStopY = (childView.top + (childViewHeight shr 1) - radius).toFloat()
+
+ // 圆底部部分竖线,起点 Y
+ val bottomStartY = (childView.top + (childViewHeight shr 1) + radius).toFloat()
+ // 圆底部部分竖线,终点 Y
+ val bottomStopY = childView.bottom.toFloat()
+
+ // 获取当前 item 是 recyclerview 的第几个 childView
+ val childPosition = parent.getChildLayoutPosition(childView)
+
+ // 绘制圆
+ when (childPosition) {
+ 0 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.hintTextColor.convertColor()
+ }
+ itemCount - 1 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.mainThemeColor.convertColor()
+ }
+ else -> {
+ circlePaint.style = Paint.Style.STROKE
+ circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ }
+ }
+ canvas.drawCircle(
+ startX,
+ (childView.top + (childViewHeight shr 1)).toFloat(),
+ radius.toFloat(),
+ circlePaint
+ )
+
+ // 绘制竖线
+ when (childPosition) {
+ // 第 0 位置上只需绘制下半部分
+ 0 -> {
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ // 最后位置只需绘制上半部分
+ parent.adapter!!.itemCount - 1 -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ }
+ // 都要绘制
+ else -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
index 52bbc99..a07e3b8 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.utils
-import android.R
import android.app.Activity
import android.view.View
import android.view.ViewGroup
@@ -19,7 +18,7 @@
decorView.addView(statusView)
// 设置根布局的参数
val rootView =
- (activity.findViewById(R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
+ (activity.findViewById(android.R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
rootView.fitsSystemWindows = true
rootView.clipToPadding = true
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
new file mode 100644
index 0000000..e4e1bf4
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
@@ -0,0 +1,96 @@
+package com.casic.qd.smartwell.utils
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.convertColor
+import com.pengxh.app.multilib.utils.SizeUtil
+
+class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() {
+ private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val radius: Int
+
+ init {
+ linePaint.color = R.color.hintTextColor.convertColor()
+ linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ radius = SizeUtil.dp2px(context, 7.5f)
+ }
+
+ override fun getItemOffsets(
+ outRect: Rect, view: View,
+ parent: RecyclerView, state: RecyclerView.State
+ ) {
+ super.getItemOffsets(outRect, view, parent, state)
+ outRect.left = SizeUtil.dp2px(context, 16.5f)
+ }
+
+ override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
+ super.onDraw(canvas, parent, state)
+ val childCount = parent.childCount
+ val layoutManager = parent.layoutManager
+ for (i in 0 until childCount) {
+ val childView = parent.getChildAt(i)
+ val childViewHeight = childView.height
+ val itemCount = parent.adapter!!.itemCount
+ val leftDecorationWidth = layoutManager!!.getLeftDecorationWidth(childView)
+ val topDecorationHeight = layoutManager.getTopDecorationHeight(childView)
+ val startX = (leftDecorationWidth shr 1).toFloat()
+ // 圆顶部部分竖线,起点 Y
+ val topStartY = (childView.top - topDecorationHeight).toFloat()
+ // 圆顶部部分竖线,终点 Y
+ val topStopY = (childView.top + (childViewHeight shr 1) - radius).toFloat()
+
+ // 圆底部部分竖线,起点 Y
+ val bottomStartY = (childView.top + (childViewHeight shr 1) + radius).toFloat()
+ // 圆底部部分竖线,终点 Y
+ val bottomStopY = childView.bottom.toFloat()
+
+ // 获取当前 item 是 recyclerview 的第几个 childView
+ val childPosition = parent.getChildLayoutPosition(childView)
+
+ // 绘制圆
+ when (childPosition) {
+ 0 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.hintTextColor.convertColor()
+ }
+ itemCount - 1 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.mainThemeColor.convertColor()
+ }
+ else -> {
+ circlePaint.style = Paint.Style.STROKE
+ circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ }
+ }
+ canvas.drawCircle(
+ startX,
+ (childView.top + (childViewHeight shr 1)).toFloat(),
+ radius.toFloat(),
+ circlePaint
+ )
+
+ // 绘制竖线
+ when (childPosition) {
+ // 第 0 位置上只需绘制下半部分
+ 0 -> {
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ // 最后位置只需绘制上半部分
+ parent.adapter!!.itemCount - 1 -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ }
+ // 都要绘制
+ else -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index f133ef4..ccbf3b1 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -261,4 +261,51 @@
@Query("keywords") keywords: String?,
@Query("devType") devType: String?
): String
+
+ /**
+ * 工单状态
+ * */
+ @GET("/dict/code/jobStatus")
+ suspend fun obtainOrderStatus(
+ @Header("token") token: String
+ ): String
+
+ /**
+ * 查询工单
+ * */
+ @GET("/job/searchList")
+ suspend fun obtainSearchResult(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String?,
+ @Query("alarmContent") alarmContent: String?,
+ @Query("alarmLevel") alarmLevel: String?,
+ @Query("jobStatus") jobStatus: String?,
+ @Query("beginTime") beginTime: String?,
+ @Query("endTime") endTime: String?,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ /**
+ * 获取工单详情
+ *
+ * @param id 工单id
+ */
+ @GET("/job/info")
+ suspend fun obtainWorkOrderDetail(
+ @Header("token") token: String,
+ @Query("id") id: String
+ ): String
+
+ /**
+ * 接单
+ *
+ * @param id 工单id
+ */
+ @FormUrlEncoded
+ @POST("/job/getJob")
+ suspend fun acceptWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String
+ ): String
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
index 52bbc99..a07e3b8 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.utils
-import android.R
import android.app.Activity
import android.view.View
import android.view.ViewGroup
@@ -19,7 +18,7 @@
decorView.addView(statusView)
// 设置根布局的参数
val rootView =
- (activity.findViewById(R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
+ (activity.findViewById(android.R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
rootView.fitsSystemWindows = true
rootView.clipToPadding = true
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
new file mode 100644
index 0000000..e4e1bf4
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
@@ -0,0 +1,96 @@
+package com.casic.qd.smartwell.utils
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.convertColor
+import com.pengxh.app.multilib.utils.SizeUtil
+
+class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() {
+ private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val radius: Int
+
+ init {
+ linePaint.color = R.color.hintTextColor.convertColor()
+ linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ radius = SizeUtil.dp2px(context, 7.5f)
+ }
+
+ override fun getItemOffsets(
+ outRect: Rect, view: View,
+ parent: RecyclerView, state: RecyclerView.State
+ ) {
+ super.getItemOffsets(outRect, view, parent, state)
+ outRect.left = SizeUtil.dp2px(context, 16.5f)
+ }
+
+ override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
+ super.onDraw(canvas, parent, state)
+ val childCount = parent.childCount
+ val layoutManager = parent.layoutManager
+ for (i in 0 until childCount) {
+ val childView = parent.getChildAt(i)
+ val childViewHeight = childView.height
+ val itemCount = parent.adapter!!.itemCount
+ val leftDecorationWidth = layoutManager!!.getLeftDecorationWidth(childView)
+ val topDecorationHeight = layoutManager.getTopDecorationHeight(childView)
+ val startX = (leftDecorationWidth shr 1).toFloat()
+ // 圆顶部部分竖线,起点 Y
+ val topStartY = (childView.top - topDecorationHeight).toFloat()
+ // 圆顶部部分竖线,终点 Y
+ val topStopY = (childView.top + (childViewHeight shr 1) - radius).toFloat()
+
+ // 圆底部部分竖线,起点 Y
+ val bottomStartY = (childView.top + (childViewHeight shr 1) + radius).toFloat()
+ // 圆底部部分竖线,终点 Y
+ val bottomStopY = childView.bottom.toFloat()
+
+ // 获取当前 item 是 recyclerview 的第几个 childView
+ val childPosition = parent.getChildLayoutPosition(childView)
+
+ // 绘制圆
+ when (childPosition) {
+ 0 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.hintTextColor.convertColor()
+ }
+ itemCount - 1 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.mainThemeColor.convertColor()
+ }
+ else -> {
+ circlePaint.style = Paint.Style.STROKE
+ circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ }
+ }
+ canvas.drawCircle(
+ startX,
+ (childView.top + (childViewHeight shr 1)).toFloat(),
+ radius.toFloat(),
+ circlePaint
+ )
+
+ // 绘制竖线
+ when (childPosition) {
+ // 第 0 位置上只需绘制下半部分
+ 0 -> {
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ // 最后位置只需绘制上半部分
+ parent.adapter!!.itemCount - 1 -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ }
+ // 都要绘制
+ else -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index f133ef4..ccbf3b1 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -261,4 +261,51 @@
@Query("keywords") keywords: String?,
@Query("devType") devType: String?
): String
+
+ /**
+ * 工单状态
+ * */
+ @GET("/dict/code/jobStatus")
+ suspend fun obtainOrderStatus(
+ @Header("token") token: String
+ ): String
+
+ /**
+ * 查询工单
+ * */
+ @GET("/job/searchList")
+ suspend fun obtainSearchResult(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String?,
+ @Query("alarmContent") alarmContent: String?,
+ @Query("alarmLevel") alarmLevel: String?,
+ @Query("jobStatus") jobStatus: String?,
+ @Query("beginTime") beginTime: String?,
+ @Query("endTime") endTime: String?,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ /**
+ * 获取工单详情
+ *
+ * @param id 工单id
+ */
+ @GET("/job/info")
+ suspend fun obtainWorkOrderDetail(
+ @Header("token") token: String,
+ @Query("id") id: String
+ ): String
+
+ /**
+ * 接单
+ *
+ * @param id 工单id
+ */
+ @FormUrlEncoded
+ @POST("/job/getJob")
+ suspend fun acceptWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 9ee4cc1..67714cd 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -241,4 +241,50 @@
suspend fun obtainMapDeviceResult(keywords: String?, devType: String?): String {
return api.obtainMapDeviceResult(AuthenticationHelper.token!!, keywords, devType)
}
+
+ /**
+ * 工单状态
+ */
+ suspend fun obtainOrderStatus(): String {
+ return api.obtainOrderStatus(AuthenticationHelper.token!!)
+ }
+
+ /**
+ * 查询工单
+ */
+ suspend fun obtainSearchResult(
+ keywords: String?,
+ alarmContent: String?,
+ alarmLevel: String?,
+ jobStatus: String?,
+ beginTime: String?,
+ endTime: String?,
+ page: Int
+ ): String {
+ return api.obtainSearchResult(
+ AuthenticationHelper.token!!,
+ keywords,
+ alarmContent,
+ alarmLevel,
+ jobStatus,
+ beginTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ page
+ )
+ }
+
+ /**
+ * 获取工单详情
+ */
+ suspend fun obtainWorkOrderDetail(id: String): String {
+ return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id)
+ }
+
+ /**
+ * 接单
+ */
+ suspend fun acceptWorkOrder(id: String): String {
+ return api.acceptWorkOrder(AuthenticationHelper.token!!, id)
+ }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
index 52bbc99..a07e3b8 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.utils
-import android.R
import android.app.Activity
import android.view.View
import android.view.ViewGroup
@@ -19,7 +18,7 @@
decorView.addView(statusView)
// 设置根布局的参数
val rootView =
- (activity.findViewById(R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
+ (activity.findViewById(android.R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
rootView.fitsSystemWindows = true
rootView.clipToPadding = true
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
new file mode 100644
index 0000000..e4e1bf4
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
@@ -0,0 +1,96 @@
+package com.casic.qd.smartwell.utils
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.convertColor
+import com.pengxh.app.multilib.utils.SizeUtil
+
+class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() {
+ private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val radius: Int
+
+ init {
+ linePaint.color = R.color.hintTextColor.convertColor()
+ linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ radius = SizeUtil.dp2px(context, 7.5f)
+ }
+
+ override fun getItemOffsets(
+ outRect: Rect, view: View,
+ parent: RecyclerView, state: RecyclerView.State
+ ) {
+ super.getItemOffsets(outRect, view, parent, state)
+ outRect.left = SizeUtil.dp2px(context, 16.5f)
+ }
+
+ override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
+ super.onDraw(canvas, parent, state)
+ val childCount = parent.childCount
+ val layoutManager = parent.layoutManager
+ for (i in 0 until childCount) {
+ val childView = parent.getChildAt(i)
+ val childViewHeight = childView.height
+ val itemCount = parent.adapter!!.itemCount
+ val leftDecorationWidth = layoutManager!!.getLeftDecorationWidth(childView)
+ val topDecorationHeight = layoutManager.getTopDecorationHeight(childView)
+ val startX = (leftDecorationWidth shr 1).toFloat()
+ // 圆顶部部分竖线,起点 Y
+ val topStartY = (childView.top - topDecorationHeight).toFloat()
+ // 圆顶部部分竖线,终点 Y
+ val topStopY = (childView.top + (childViewHeight shr 1) - radius).toFloat()
+
+ // 圆底部部分竖线,起点 Y
+ val bottomStartY = (childView.top + (childViewHeight shr 1) + radius).toFloat()
+ // 圆底部部分竖线,终点 Y
+ val bottomStopY = childView.bottom.toFloat()
+
+ // 获取当前 item 是 recyclerview 的第几个 childView
+ val childPosition = parent.getChildLayoutPosition(childView)
+
+ // 绘制圆
+ when (childPosition) {
+ 0 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.hintTextColor.convertColor()
+ }
+ itemCount - 1 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.mainThemeColor.convertColor()
+ }
+ else -> {
+ circlePaint.style = Paint.Style.STROKE
+ circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ }
+ }
+ canvas.drawCircle(
+ startX,
+ (childView.top + (childViewHeight shr 1)).toFloat(),
+ radius.toFloat(),
+ circlePaint
+ )
+
+ // 绘制竖线
+ when (childPosition) {
+ // 第 0 位置上只需绘制下半部分
+ 0 -> {
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ // 最后位置只需绘制上半部分
+ parent.adapter!!.itemCount - 1 -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ }
+ // 都要绘制
+ else -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index f133ef4..ccbf3b1 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -261,4 +261,51 @@
@Query("keywords") keywords: String?,
@Query("devType") devType: String?
): String
+
+ /**
+ * 工单状态
+ * */
+ @GET("/dict/code/jobStatus")
+ suspend fun obtainOrderStatus(
+ @Header("token") token: String
+ ): String
+
+ /**
+ * 查询工单
+ * */
+ @GET("/job/searchList")
+ suspend fun obtainSearchResult(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String?,
+ @Query("alarmContent") alarmContent: String?,
+ @Query("alarmLevel") alarmLevel: String?,
+ @Query("jobStatus") jobStatus: String?,
+ @Query("beginTime") beginTime: String?,
+ @Query("endTime") endTime: String?,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ /**
+ * 获取工单详情
+ *
+ * @param id 工单id
+ */
+ @GET("/job/info")
+ suspend fun obtainWorkOrderDetail(
+ @Header("token") token: String,
+ @Query("id") id: String
+ ): String
+
+ /**
+ * 接单
+ *
+ * @param id 工单id
+ */
+ @FormUrlEncoded
+ @POST("/job/getJob")
+ suspend fun acceptWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 9ee4cc1..67714cd 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -241,4 +241,50 @@
suspend fun obtainMapDeviceResult(keywords: String?, devType: String?): String {
return api.obtainMapDeviceResult(AuthenticationHelper.token!!, keywords, devType)
}
+
+ /**
+ * 工单状态
+ */
+ suspend fun obtainOrderStatus(): String {
+ return api.obtainOrderStatus(AuthenticationHelper.token!!)
+ }
+
+ /**
+ * 查询工单
+ */
+ suspend fun obtainSearchResult(
+ keywords: String?,
+ alarmContent: String?,
+ alarmLevel: String?,
+ jobStatus: String?,
+ beginTime: String?,
+ endTime: String?,
+ page: Int
+ ): String {
+ return api.obtainSearchResult(
+ AuthenticationHelper.token!!,
+ keywords,
+ alarmContent,
+ alarmLevel,
+ jobStatus,
+ beginTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ page
+ )
+ }
+
+ /**
+ * 获取工单详情
+ */
+ suspend fun obtainWorkOrderDetail(id: String): String {
+ return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id)
+ }
+
+ /**
+ * 接单
+ */
+ suspend fun acceptWorkOrder(id: String): String {
+ return api.acceptWorkOrder(AuthenticationHelper.token!!, id)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt
index ccfeb79..562d160 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt
@@ -70,7 +70,6 @@
false
}
- loginButton.setChangeAlphaWhenPress(true)
loginButton.setOnClickListener {
val account = userNameView.text.toString().trim()
val userPassword = userPasswordView.text.toString().trim()
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var isExpand = false
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): SearchResultAdapter.ItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_search_result_recycleview, parent, false)
+ return ItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onBindViewHolder(
+ holder: SearchResultAdapter.ItemViewHolder,
+ position: Int
+ ) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+ holder.alarmContentView.text = rowsBean.alarmContentName
+ holder.createTimeView.text = rowsBean.createTime
+ holder.wellCodeView.text = rowsBean.wellCode
+ val alarmValue = rowsBean.alarmValue.toString()
+ if (alarmValue.isBlank()) {
+ holder.alarmValueView.text = "报警值未知"
+ } else {
+ holder.alarmValueView.text = alarmValue
+ }
+ holder.wellLocationView.text = rowsBean.position
+ holder.currentStateView.text =
+ String.format("${rowsBean.jobStatusName}-${rowsBean.jobBelongTo}")
+ if (rowsBean.jobStatus == "0") {
+ //待处理订单需要显示接单按钮,隐藏流转记录
+ holder.operationLayout.visibility = View.VISIBLE
+ holder.timeLineLayout.visibility = View.GONE
+ holder.transferLayout.visibility = View.GONE
+ if (listener != null) {
+ holder.operationButton.setChangeAlphaWhenPress(true)
+ holder.operationButton.setOnClickListener {
+ listener!!.onOperationClicked(position)
+ }
+ }
+ } else {
+ holder.operationLayout.visibility = View.GONE
+ holder.timeLineLayout.visibility = View.VISIBLE
+ //timeLineLayout下属UI
+ val expandableViewAdapter = ExpandableViewAdapter(context)
+ holder.expandableView.adapter = expandableViewAdapter
+ holder.expandableView.layoutManager = LinearLayoutManager(context)
+ holder.expandableView.addItemDecoration(TimeLineItemDecoration(context))
+ holder.expandableImageView.setOnClickListener {
+ if (!isExpand) {
+ //展开列表动画
+ holder.expandableImageView.arrowAnimation(180f)
+ isExpand = true
+ //子列表绑定数据
+ expandableViewAdapter.setExpandableData(createExpandableList(rowsBean))
+ } else {
+ //关闭列表动画
+ holder.expandableImageView.arrowAnimation(0f)
+ isExpand = false
+ //子列表清空数据
+ expandableViewAdapter.clearAll()
+ }
+ }
+ //transferLayout下属UI
+ if (rowsBean.jobStatus == "2" || rowsBean.jobStatus == "3") {
+ holder.transferLayout.visibility = View.VISIBLE
+ if (listener != null) {
+ holder.transferView.setChangeAlphaWhenPress(true)
+ holder.transferView.setOnClickListener {
+ listener!!.onTransferViewClicked(position)
+ }
+ }
+ } else {
+ holder.transferLayout.visibility = View.GONE
+ }
+ }
+
+ //item普通点击事件
+ if (listener != null) {
+ holder.itemView.setOnClickListener {
+ listener!!.onClicked(position)
+ }
+ }
+ }
+
+ private fun createExpandableList(rowsBean: SearchResultModel.DataBean.RowsBean): MutableList {
+ val expandableList: MutableList = ArrayList()
+ expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单"))
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.getJobTime,
+ String.format("${rowsBean.getJobPerson}接单")
+ )
+ )
+
+ if (rowsBean.confirmJobTime.toString().isBlank()) {
+ return expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.confirmJobTime,
+ String.format("${rowsBean.confirmJobPerson}确认工单")
+ )
+ )
+ }
+
+ return if (rowsBean.handleJobTime.toString().isBlank()) {
+ expandableList
+ } else {
+ expandableList.add(
+ ExpandableDataModel(
+ rowsBean.handleJobTime,
+ String.format("${rowsBean.handleJobPerson}完成工单")
+ )
+ )
+ expandableList
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var alarmContentView: TextView = view.findViewById(R.id.alarmContentView)
+ var createTimeView: TextView = view.findViewById(R.id.createTimeView)
+ var wellCodeView: TextView = view.findViewById(R.id.wellCodeView)
+ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView)
+ var wellLocationView: TextView = view.findViewById(R.id.wellLocationView)
+ var operationLayout: RelativeLayout = view.findViewById(R.id.operationLayout)
+ var operationButton: QMUIRoundButton = view.findViewById(R.id.operationButton)
+ var timeLineLayout: RelativeLayout = view.findViewById(R.id.timeLineLayout)
+ var currentStateView: TextView = view.findViewById(R.id.currentStateView)
+ var expandableImageView: ImageView = view.findViewById(R.id.expandableImageView)
+ var expandableView: RecyclerView = view.findViewById(R.id.expandableView)
+ var transferLayout: LinearLayout = view.findViewById(R.id.transferLayout)
+ var transferView: QMUIRoundButton = view.findViewById(R.id.transferView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onClicked(position: Int)
+
+ fun onOperationClicked(position: Int)
+
+ fun onTransferViewClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
new file mode 100644
index 0000000..7a8bd65
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/TopViewPagerAdapter.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+
+class TopViewPagerAdapter(
+ fragmentManager: FragmentManager,
+ private val pageTitles: Array,
+ private val pages: List
+) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+
+ override fun getItem(position: Int): Fragment {
+ return pages[position]
+ }
+
+ override fun getCount(): Int {
+ return pages.size
+ }
+
+ override fun getPageTitle(position: Int): CharSequence {
+ return pageTitles[position]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
new file mode 100644
index 0000000..733f579
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/base/BaseFragment.kt
@@ -0,0 +1,31 @@
+package com.casic.qd.smartwell.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+abstract class BaseFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(initLayoutView(), container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setupTopBarLayout()
+ initData()
+ initEvent()
+ }
+
+ abstract fun initLayoutView(): Int
+
+ abstract fun setupTopBarLayout()
+
+ abstract fun initData()
+
+ abstract fun initEvent()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
new file mode 100644
index 0000000..482dbe0
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/ImageView.kt
@@ -0,0 +1,11 @@
+package com.casic.qd.smartwell.extensions
+
+import android.view.animation.LinearInterpolator
+import android.widget.ImageView
+
+fun ImageView.arrowAnimation(angle: Float) {
+ val animation = this.animate()
+ animation.duration = 300
+ animation.interpolator = LinearInterpolator()
+ animation.rotation(angle)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
index 9327e3d..7d4e82d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Int.kt
@@ -13,4 +13,12 @@
return Random.nextInt(100)
}
return Random.nextInt(this - 100, this + 100)
+}
+
+fun Int.toLevel(): String {
+ return if (this == 0) {
+ ""
+ } else {
+ this.toString()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
index 6c2525f..27134da 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt
@@ -88,4 +88,16 @@
}
}
return isDigit && isLetter
+}
+
+fun String.toChinese(): String {
+ return when (this) {
+ "0" -> "全部"
+ "1" -> "一级"
+ "2" -> "二级"
+ "3" -> "三级"
+ else -> {
+ "未知"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
new file mode 100644
index 0000000..b353d44
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderCompletedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-已完成
+ * */
+class OrderCompletedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_completed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
new file mode 100644
index 0000000..bed71bb
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderInHandleFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-处理中
+ * */
+class OrderInHandleFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_in_handle
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
new file mode 100644
index 0000000..b8aeec6
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotConfirmedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待确认
+ * */
+class OrderNotConfirmedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_confirmed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
new file mode 100644
index 0000000..c31e6d2
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/fragment/OrderNotProcessedFragment.kt
@@ -0,0 +1,24 @@
+package com.casic.qd.smartwell.fragment
+
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseFragment
+
+/**
+ * 工单-待处理
+ * */
+class OrderNotProcessedFragment : BaseFragment() {
+
+ override fun initLayoutView(): Int = R.layout.fragment_order_not_processed
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
index 62d6a11..4365045 100644
--- a/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/model/BannerImageModel.kt
@@ -1,12 +1,5 @@
package com.casic.qd.smartwell.model
-/**
- * @author Administrator
- * @description TODO
- * @package com.example.mutidemo.bean
- * @date 2022/2/17 23:43
- * @email 290677893@qq.com
- */
class BannerImageModel {
/**
* imageTitle : 亚洲首例300级深水导管架“海基一号”成...
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
new file mode 100644
index 0000000..0dc633d
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/ExpandableDataModel.kt
@@ -0,0 +1,3 @@
+package com.casic.qd.smartwell.model
+
+class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?)
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
new file mode 100644
index 0000000..336ebed
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/OrderStatusModel.kt
@@ -0,0 +1,25 @@
+package com.casic.qd.smartwell.model
+
+class OrderStatusModel {
+ /**
+ * code : 200
+ * data : [{"name":"待处理","id":"84","value":"0"},{"name":"待确认","id":"85","value":"1"},{"name":"处理中","id":"86","value":"2"},{"name":"已完成","id":"87","value":"3"},{"name":"已取消","id":"93","value":"4"}]
+ * message : 请求成功
+ * success : true
+ */
+ var code = 0
+ var message: String? = null
+ var success = false
+ var data: List? = null
+
+ class DataBean {
+ /**
+ * name : 待处理
+ * id : 84
+ * value : 0
+ */
+ var name: String? = null
+ var id: String? = null
+ var value: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
new file mode 100644
index 0000000..b9b8ac9
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/SearchResultModel.kt
@@ -0,0 +1,52 @@
+package com.casic.qd.smartwell.model
+
+class SearchResultModel {
+ var code = 0
+ var data: DataBean? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var rows: MutableList? = null
+ var total = 0
+
+ class RowsBean {
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
new file mode 100644
index 0000000..ebd1709
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WorkOrderDetailModel.kt
@@ -0,0 +1,58 @@
+package com.casic.qd.smartwell.model
+
+class WorkOrderDetailModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var firstState: String? = null
+ var alarmContent = 0
+ var deptName: String? = null
+ var jobStatus: String? = null
+ var handleJobPerson: String? = null
+ var alarmContentName: String? = null
+ var shouldGetTime: String? = null
+ var firstStatePhotos: String? = null
+ var wellCode: String? = null
+ var deptid: String? = null
+ var alarmTypeName: String? = null
+ var jobCode: String? = null
+ var jobBelongTo: String? = null
+ var jobFlag: String? = null
+ var confirmJobPerson: String? = null
+ var confirmJobTime: String? = null
+ var jobStatusName: String? = null
+ var alarmValue: String? = null
+ var alarmId: String? = null
+ var alarmLevel: String? = null
+ var handleJobTime: String? = null
+ var tel: String? = null
+ var id: String? = null
+ var wellId: String? = null
+ var jobType: String? = null
+ var flow: MutableList? = null
+ var editable = 0
+ var alarmTime: String? = null
+ var handleMessage: String? = null
+ var alarmMessage: String? = null
+ var staff: String? = null
+ var handlePhotos: String? = null
+ var getJobTime: String? = null
+ var getJobPerson: String? = null
+ var shouldHandleTime: String? = null
+ var jobId: String? = null
+ var alarmType: String? = null
+ var alarmStatus: String? = null
+ var devcode: String? = null
+ var createTime: String? = null
+ var position: String? = null
+
+ class FlowBean {
+ var from: String? = null
+ var to: String? = null
+ var time: String? = null
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index 6981057..ec30741 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -16,9 +16,13 @@
const val RADIUS_SIZE = 100 //相距多少米才聚合,单位:米
val HOME_ICONS = arrayOf(
- R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
+ R.drawable.ic_home_map,
+ R.drawable.ic_work_order,
+ R.drawable.ic_home_record,
+ R.drawable.ic_home_statistics,
)
- val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计")
+ val HOME_ITEMS = arrayOf("地图展示", "工单管理", "记录查询", "汇总统计")
+ val SUB_PAGE_TITLES = arrayOf("待处理", "待确认", "处理中", "已完成")
val POPUP_IMAGES = arrayOf(
R.drawable.ic_menu_map, R.drawable.ic_satellite, R.drawable.ic_3d
)
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
index 52bbc99..a07e3b8 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/StatusBarColorUtil.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.utils
-import android.R
import android.app.Activity
import android.view.View
import android.view.ViewGroup
@@ -19,7 +18,7 @@
decorView.addView(statusView)
// 设置根布局的参数
val rootView =
- (activity.findViewById(R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
+ (activity.findViewById(android.R.id.content) as ViewGroup).getChildAt(0) as ViewGroup
rootView.fitsSystemWindows = true
rootView.clipToPadding = true
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
new file mode 100644
index 0000000..e4e1bf4
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/TimeLineItemDecoration.kt
@@ -0,0 +1,96 @@
+package com.casic.qd.smartwell.utils
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.Rect
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.convertColor
+import com.pengxh.app.multilib.utils.SizeUtil
+
+class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() {
+ private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
+ private val radius: Int
+
+ init {
+ linePaint.color = R.color.hintTextColor.convertColor()
+ linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ radius = SizeUtil.dp2px(context, 7.5f)
+ }
+
+ override fun getItemOffsets(
+ outRect: Rect, view: View,
+ parent: RecyclerView, state: RecyclerView.State
+ ) {
+ super.getItemOffsets(outRect, view, parent, state)
+ outRect.left = SizeUtil.dp2px(context, 16.5f)
+ }
+
+ override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
+ super.onDraw(canvas, parent, state)
+ val childCount = parent.childCount
+ val layoutManager = parent.layoutManager
+ for (i in 0 until childCount) {
+ val childView = parent.getChildAt(i)
+ val childViewHeight = childView.height
+ val itemCount = parent.adapter!!.itemCount
+ val leftDecorationWidth = layoutManager!!.getLeftDecorationWidth(childView)
+ val topDecorationHeight = layoutManager.getTopDecorationHeight(childView)
+ val startX = (leftDecorationWidth shr 1).toFloat()
+ // 圆顶部部分竖线,起点 Y
+ val topStartY = (childView.top - topDecorationHeight).toFloat()
+ // 圆顶部部分竖线,终点 Y
+ val topStopY = (childView.top + (childViewHeight shr 1) - radius).toFloat()
+
+ // 圆底部部分竖线,起点 Y
+ val bottomStartY = (childView.top + (childViewHeight shr 1) + radius).toFloat()
+ // 圆底部部分竖线,终点 Y
+ val bottomStopY = childView.bottom.toFloat()
+
+ // 获取当前 item 是 recyclerview 的第几个 childView
+ val childPosition = parent.getChildLayoutPosition(childView)
+
+ // 绘制圆
+ when (childPosition) {
+ 0 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.hintTextColor.convertColor()
+ }
+ itemCount - 1 -> {
+ circlePaint.style = Paint.Style.FILL
+ circlePaint.color = R.color.mainThemeColor.convertColor()
+ }
+ else -> {
+ circlePaint.style = Paint.Style.STROKE
+ circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat()
+ }
+ }
+ canvas.drawCircle(
+ startX,
+ (childView.top + (childViewHeight shr 1)).toFloat(),
+ radius.toFloat(),
+ circlePaint
+ )
+
+ // 绘制竖线
+ when (childPosition) {
+ // 第 0 位置上只需绘制下半部分
+ 0 -> {
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ // 最后位置只需绘制上半部分
+ parent.adapter!!.itemCount - 1 -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ }
+ // 都要绘制
+ else -> {
+ canvas.drawLine(startX, topStartY, startX, topStopY, linePaint)
+ canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint)
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index f133ef4..ccbf3b1 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -261,4 +261,51 @@
@Query("keywords") keywords: String?,
@Query("devType") devType: String?
): String
+
+ /**
+ * 工单状态
+ * */
+ @GET("/dict/code/jobStatus")
+ suspend fun obtainOrderStatus(
+ @Header("token") token: String
+ ): String
+
+ /**
+ * 查询工单
+ * */
+ @GET("/job/searchList")
+ suspend fun obtainSearchResult(
+ @Header("token") token: String,
+ @Query("keywords") keywords: String?,
+ @Query("alarmContent") alarmContent: String?,
+ @Query("alarmLevel") alarmLevel: String?,
+ @Query("jobStatus") jobStatus: String?,
+ @Query("beginTime") beginTime: String?,
+ @Query("endTime") endTime: String?,
+ @Query("limit") limit: Int,
+ @Query("offset") offset: Int
+ ): String
+
+ /**
+ * 获取工单详情
+ *
+ * @param id 工单id
+ */
+ @GET("/job/info")
+ suspend fun obtainWorkOrderDetail(
+ @Header("token") token: String,
+ @Query("id") id: String
+ ): String
+
+ /**
+ * 接单
+ *
+ * @param id 工单id
+ */
+ @FormUrlEncoded
+ @POST("/job/getJob")
+ suspend fun acceptWorkOrder(
+ @Header("token") token: String,
+ @Field("id") id: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 9ee4cc1..67714cd 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -241,4 +241,50 @@
suspend fun obtainMapDeviceResult(keywords: String?, devType: String?): String {
return api.obtainMapDeviceResult(AuthenticationHelper.token!!, keywords, devType)
}
+
+ /**
+ * 工单状态
+ */
+ suspend fun obtainOrderStatus(): String {
+ return api.obtainOrderStatus(AuthenticationHelper.token!!)
+ }
+
+ /**
+ * 查询工单
+ */
+ suspend fun obtainSearchResult(
+ keywords: String?,
+ alarmContent: String?,
+ alarmLevel: String?,
+ jobStatus: String?,
+ beginTime: String?,
+ endTime: String?,
+ page: Int
+ ): String {
+ return api.obtainSearchResult(
+ AuthenticationHelper.token!!,
+ keywords,
+ alarmContent,
+ alarmLevel,
+ jobStatus,
+ beginTime,
+ endTime,
+ Constant.PAGE_LIMIT,
+ page
+ )
+ }
+
+ /**
+ * 获取工单详情
+ */
+ suspend fun obtainWorkOrderDetail(id: String): String {
+ return api.obtainWorkOrderDetail(AuthenticationHelper.token!!, id)
+ }
+
+ /**
+ * 接单
+ */
+ suspend fun acceptWorkOrder(id: String): String {
+ return api.acceptWorkOrder(AuthenticationHelper.token!!, id)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt
index ccfeb79..562d160 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/LoginActivity.kt
@@ -70,7 +70,6 @@
false
}
- loginButton.setChangeAlphaWhenPress(true)
loginButton.setOnClickListener {
val account = userNameView.text.toString().trim()
val userPassword = userPasswordView.text.toString().trim()
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt
index b989b16..96c23a1 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt
@@ -112,14 +112,15 @@
//首页功能块
val homeRecycleAdapter = HomeRecycleAdapter(this)
- homeRecyclerView.layoutManager = GridLayoutManager(this, 3)
+ homeRecyclerView.layoutManager = GridLayoutManager(this, 4)
homeRecyclerView.adapter = homeRecycleAdapter
homeRecycleAdapter.setOnGridItemClickListener(object :
HomeRecycleAdapter.OnGridItemClickListener {
override fun onClick(position: Int) {
when (position) {
0 -> context.navigatePageTo()
- 1 -> {
+ 1 -> context.navigatePageTo()
+ 2 -> {
BottomActionSheet.Builder()
.setContext(context)
.setActionItemTitles(arrayOf("设备", "数据"))
@@ -131,7 +132,7 @@
}.build().show()
}
- 2 -> context.navigatePageTo()
+ 3 -> context.navigatePageTo()
}
}
})
diff --git a/app/build.gradle b/app/build.gradle
index 8c2381c..ea77e44 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,6 +20,8 @@
targetSdkVersion 31
versionCode 1
versionName "1.0.0"
+
+ ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8" }
}
buildTypes {
@@ -101,4 +103,6 @@
implementation 'org.jsoup:jsoup:1.14.3'
//ZBar(综合Java和C++扫码),生成二维码
implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2'
+ //标签流式布局
+ implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2987e8..b93d019 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,9 @@
+
+
+
() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+ private var dataRows: MutableList = ArrayList()
+
+ fun setExpandableData(dataSet: MutableList) {
+ this.dataRows = dataSet
+ notifyDataSetChanged()
+ }
+
+ fun clearAll() {
+ if (dataRows.size != 0) {
+ dataRows.clear()
+ notifyDataSetChanged()
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): ExpandableItemViewHolder {
+ val view: View =
+ layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false)
+ return ExpandableItemViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) {
+ holder.dateView.text = dataRows[position].orderStateTime
+ holder.operationView.text = dataRows[position].operationPerson
+ if (position == dataRows.size - 1) {
+ holder.dateView.setTextColor(R.color.mainThemeColor.convertColor())
+ holder.operationView.setTextColor(R.color.mainThemeColor.convertColor())
+ }
+ }
+
+ override fun getItemCount(): Int = dataRows.size
+
+ inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var dateView: TextView = view.findViewById(R.id.dateView)
+ var operationView: TextView = view.findViewById(R.id.operationView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
new file mode 100644
index 0000000..5b43305
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/adapter/SearchResultAdapter.kt
@@ -0,0 +1,176 @@
+package com.casic.qd.smartwell.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.extensions.arrowAnimation
+import com.casic.qd.smartwell.model.ExpandableDataModel
+import com.casic.qd.smartwell.model.SearchResultModel
+import com.casic.qd.smartwell.utils.TimeLineItemDecoration
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+
+class SearchResultAdapter(
+ private val context: Context,
+ private val dataRows: MutableList
+) : RecyclerView.Adapter